Matlab条形图传说

时间:2017-01-02 06:07:25

标签: matlab bar-chart 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 );"

2 个答案:

答案 0 :(得分: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未被覆盖)

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);

Example with bad legend labels

请注意, FontSize 只是您可以使用的不同名称 - 值对参数的示例。

答案 1 :(得分:0)

您有comma separated list,因此您需要使用以下内容。

legend(l{:});

您遇到的问题可能是因为您使用的是Matlab版本。否则你的代码也应该运行。例如,您的代码在我的Matlab版本(2016)中运行良好。