我尝试将一些数据绘制到条形图中并添加图例。 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 );"
答案 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 list和cell
一起用作不同标签的输入。
但是,使用单元格通常会更好,因为在不发出警告的情况下启用其他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);
请注意, FontSize 只是您可以使用的不同名称 - 值对参数的示例。
答案 1 :(得分:0)
您有comma separated list,因此您需要使用以下内容。
legend(l{:});
您遇到的问题可能是因为您使用的是Matlab版本。否则你的代码也应该运行。例如,您的代码在我的Matlab版本(2016)中运行良好。