2017-01-02 419 views
1

我嘗試將一些數據繪製到條形圖並添加圖例。 Matlab爲酒吧分配四種顏色,我將爲這些顏色添加圖例。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

你的問題很可能(如評論TroyHaskin),你已經使用legend作爲代碼中的變量名稱。嘗試將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命令可comma separeted listcell作爲與所述不同的標記的輸入。

但是,使用單元格通常會更好,因爲它可以在不發出警告的情況下啓用其他name-value pair input arguments

警告:忽略額外的圖例條目。

例如,您的標籤l的列表(前提是legend isn't覆蓋)

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)的數量不匹配的傳說輸入的數量(因爲「字號」也被認爲是一個標籤)

因此,如果您的l列表太短,並且您將其作爲逗號分隔列表提供,那麼您也會遇到麻煩。然後字體大小包含在您的圖例中,請參閱下面的圖片。

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

注意字號不僅是你可以使用不同的名稱 - 值對參數的一個例子。