在Matlab的条形图中的传奇

时间:2013-02-04 23:15:48

标签: matlab plot legend

如何在Matlab中绘制条形图中的图例?这是代码:

Y = [1.5056
0.72983
3.4530
3.2900
1.4839
12.9 ];
n = length(Y);
h = bar(Y);
colormap(summer(n));
grid on

l = cell(1,6);
l{1}='L'; l{2}='B'; l{3}='R'; l{4}='P'; l{5}='h'; l{6}='Ri';    
legend(h,l);

这会产生错误:警告:忽略额外的图例条目。我尝试了在SO和网络上找到的解决方案,但我无法解决此问题。

2 个答案:

答案 0 :(得分:16)

您可以使用刻度标签解决此问题,而不是图例:

set(gca,'xticklabel', l) 

enter image description here

这将标记每个栏。如果您想使用legend,您需要有一个矩阵数据,因此条形图将在每个条目中显示几个条形图。例如

Y=rand(10,6)
h = bar(Y);
colormap(summer(n));
grid on
l = cell(1,6);
l{1}='L'; l{2}='B'; l{3}='R'; l{4}='P'; l{5}='h'; l{6}='Ri';    
legend(h,l);

enter image description here

或者,您可以通过以下方式使用不同的bar()来电:

h = bar(diag(Y));

但是你会得到每个酒吧的位移:

enter image description here

因此,使用legend真正做到这一点的唯一方法是分别绘制每个bar,与所讨论的here类似。

答案 1 :(得分:1)

除了bla的回答,你可以使用

h = bar(diag(Y),'stacked');

如果你想避免移位。