Matlab只显示图例

时间:2015-12-13 18:34:51

标签: matlab

我试图绘制一些数据如下:

figure(2);
l = plot(1:50,data_a(:,2),1:50, data_a(:,2), 'b*');
set(l,'Color','red');

hold on;
lb = plot(1:50,data_b(:,2),1:50, data_b(:,2), 'b*');
set(lb, 'Color', 'blue');

hold on;
lc = plot(1:50,data_c(:,2),1:50, data_c(:,2), 'b*');
set(lc, 'Color', 'green');

hold on; 
ld = plot(1:50,data_d(:,2),1:50, data_d(:,2), 'b*');
set(ld, 'Color', 'cyan');

legend([l,lb,lc,ld], 'A', 'B', 'C', 'D');

如果我只是使用

legend('show')

这也将包括text()函数绘制的点,我不想要。因此,为什么在最后一行我指定我只希望元素l,lb,lc和ld(图)包含在图例中。

这与说明given on the MathWorks site一致。

但是,它会返回错误:

Error using legend (line 120)
Operands to the || and && operators must be convertible to logical scalar values.

Error in visualizer (line 33)
legend([l,lb,lc,ld], 'A', 'B', 'C', 'D');

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

每个plot调用都会绘制两个内容,因此返回的句柄是2 x 1向量。你可以尝试这个 - 只需使用每个句柄向量的第一个元素:

legend([l(1),lb(1),lc(1),ld(1)], 'A', 'B', 'C', 'D');

然而,我不确定为什么你似乎两次绘制相同的数据只是为线和标记着色。如果你修复它,那么你的句柄将是标量,图例条目看起来是正确的。这样的事情可能是:

figure(2);
l = plot(1:50, data_a(:,2), 'r-*');

hold on;
lb = plot(1:50, data_b(:,2), 'b-*');

hold on;
lc = plot(1:50, data_c(:,2), 'g-*');

hold on; 
ld = plot(1:50, data_d(:,2), 'c-*');

legend([l,lb,lc,ld], 'A', 'B', 'C', 'D');

或略有不同:

figure(2);
l = plot(1:50, data_a(:,2), 'b*');
set(l,'Color','r');

hold on;
lb = plot(1:50, data_b(:,2), 'b*');
set(lb,'Color','b');

hold on;
lc = plot(1:50, data_c(:,2), 'b*');
set(lc,'Color','g');

hold on; 
ld = plot(1:50, data_d(:,2), 'b*');
set(ld,'Color','c');

legend([l,lb,lc,ld], 'A', 'B', 'C', 'D');

答案 1 :(得分:0)

句柄不能超过标量值。因此,您无法将包含多条曲线的绘图分配给句柄,并使用该句柄设置图例。 检查我在以下示例中对'l4'所做的操作:

x = 1:0.1:10;
y = sin(x);
z= cos(x);
w = y + z;

l1 = plot(x,y,'bo'); hold on
l2 = plot(x,z,'bo'); hold on
l3 = plot(x,w,'bo'); hold on

l4 = plot(x,y+1,x,z+1,'+');


set(l1,'Color','red');
set(l2,'Color','blue');
set(l3,'Color','green');

set(l4,'Color','black');

legend([l1,l2,l3, l4(1), l4(2)],'A','B','C','D','E')

enter image description here