簡體   English   中英

Matlab條形圖圖例

[英]Matlab bar plot legend

我嘗試將一些數據繪制到條形圖中並添加圖例。 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 );"

您的問題很可能(如TroyHaskin所評論)是您在代碼的前面使用了legend作為變量名。 嘗試在帶有legend( l );的行的正上方放置一個clear legend legend( l ); 這個簡短的例子可以說明這一點

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

Matlab無法弄清楚如何將單元格l轉換為索引。


legend命令作品 逗號separeted列表cell與不同的標簽輸入。

但是,使用單元通常會更好,因為in啟用了附加的名稱/值對輸入參數而不發出警告。

警告:忽略多余的圖例條目。

例如,您的標簽列表為l (前提是legend未被覆蓋)

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

您可以簡單地同時使用

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

但是使用第一個,您也可以添加,例如

legend(l, 'FontSize', 8)

然后,Matlab理解l中的標簽被分組在一起並且'FontSize'不是標簽。

如果您使用

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

您將收到一條警告,指出情節(4)中的行數與圖例輸入的數目不匹配(因為“ FontSize”也被視為標簽)

因此,如果您的l列表太短並且以逗號分隔的列表形式提供,也會給您帶來麻煩。 然后, FontSize將包含在您的圖例中,請參見下圖。

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

帶有錯誤圖例標簽的示例

請注意, FontSize僅是您可以使用的不同“名稱/值”對參數的示例。

您有一個用逗號分隔的列表 ,因此您需要使用以下內容。

legend(l{:});

您面臨的問題可能是由於您使用的Matlab版本。 否則,您的代碼也應運行。 例如,您的代碼在我的Matlab版本(2016)中運行良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM