2017-01-02 70 views
1

棒グラフにデータをプロットして凡例を追加しようとしています。 Matlabはバーに4色を割り当てます。これらの色に凡例を追加します。Matlab棒グラフの凡例

私のコードは次のとおりです。

data = rand(8, 4); 
l = {'a', 'b', 'c', 'd'}; 
graph = bar(data); 
legend(l); 

MATLABは、グラフをプロットすることができますが、それは、凡例を追加することはできません。 エラーメッセージは次のとおりです。

"Error using subsindex 
Function 'subsindex' is not defined for values of class 'cell'. 
Error in plotDisAndStep 
legend(l);" 
+3

変数 'legend'を持つときにエラーが発生し、その関数を使用しようとします。変数の名前を変更してください。 – TroyHaskin

答えて

0

あなたはcomma separated listを持っているので、あなたは、次を使用する必要があります。

legend(l{:}); 

あなたが直面している問題は、使用しているMatlabのバージョンが原因である可能性があります。それ以外の場合は、コードも実行する必要があります。たとえば、あなたのコードはMatlabの私のバージョン(2016)で正常に動作しています。

+0

なぜdownvote?あなたが何かが間違っていると思ったらコメントをしてください! –

2

あなたの問題は、おそらくあなたのコードで変数名としてlegendを使用した(TroyHaskinとコメントされている)可能性があります。 legend(l);の行のすぐ上にclear legendを置くようにしてください。これは、MATLABがインデックスにセルlを変換する方法を見つけ出すことはできません

l = {'a', 'b', 'c', 'd'}; 
A = 1; 
A(l) 
Error: Function 'subsindex' is not defined for values of class 'cell'. 

この短い例で説明することができます。


legendコマンドは、異なるラベルを持つ入力として両方comma separeted listcellと連携。

しかし、セルを使用すると、通常、警告を発行せずにname-value pair input argumentsを追加できるようになります。

警告:余分な凡例を無視します。あなたは、単に

legend(l) % Cell input 
legend(l{:}) % Cell elements fed separately 

しかし、あなたはまた、最初の可能性が使用して両方を使用することができ

例えば

、(legendが上書きisn'tものとする)ラベルlのリストと

l = {'a', 'b', 'c', 'd'}; 

例えば、

legend(l, 'FontSize', 8) 

lのラベルはグループ化されており、'FontSize'はラベルではありません。

あなたは

legend(l{:}, 'FontSize', 8); 

を使用している場合は、「のFontSize」のもあることを想定しているため、プロットの行数は(4)伝説の入力(の数と一致しないという警告が表示されますラベル)

したがって、あなたのlリストが短すぎてカンマ区切りのリストとして指定すると、問題が発生します。その後、FontSizeがあなたの凡例に含まれています。下の画像を参照してください。

data = rand(8, 5); % <-- Added one extra line 
l = {'a', 'b', 'c', 'd'}; 
graph = bar(data); 
legend(l{:}, 'FontSize', 8); 

Example with bad legend labels

のFontSizeはあなたが使用できる別の名前と値のペアの引数の一例です。