处理和消除MatLab图例中的多个条目

时间:2018-03-11 18:30:41

标签: matlab plot legend

我目前想拥有图表的图例,但是我正在绘制几条应该只有3种类型的行。

我目前的选择是在边界外使用虚拟情节,绘制相关数据并在结尾处调用图例。它有效但很容易出错。我想更新图例并选择一些图。

我尝试使用 let x = Immutable.List([Immutable.Record({ name: 'Steve' })]) console.log('x', x) // undefined ,但后来出现了两个问题:

  1. 它仍然绘制5个句柄而不是3个。

  2. 它没有正确的线条样式&颜色。

  3. 有什么想法吗?

    Bellow跟随代码(带有虚拟情节评论)和当前版本的图片给出了错误以及我想看的内容。

    leg_handle.String

    它给出了什么:

    Weird

    我期望拥有的内容:

    Proper

    我使用clear figure() hold on %using %dummy plot % leg_text={'a','b','c'}; % plot(100,100,'-r') % plot(100,100,'-b') % plot(100,100,'-k') for ii=1:20, plot(1:11,linspace(0,ii,11),'-r') end for ii=30:50, plot(1:11,linspace(0,ii,11),'-b') end for ii=70:80, plot(1:11,linspace(ii,25,11),'-k') end Yaxl=[-1 80]; Xaxl=[1 11]; set(gca, 'Visible','on', ... 'Box','on', ... 'Layer','top',... 'Xlim',Xaxl, ... 'Ylim',Yaxl); %using % legend(leg_text) %want to use leg_hand=legend(gca,'show'); leg_hand.String=leg_hand.String([1 21 42]); %extra comand will give the things that i wanted above % leg_hand.String=leg_hand.String([1 2 3]); 尝试了this method,但这只提供了我已经使用过的[a,b,c,d]=legend句柄。

1 个答案:

答案 0 :(得分:2)

这个小小的解决方法应该可以胜任:

clear();

figure();
hold on;

h = gobjects(3,1);

for ii = 1:20
    h(1) = plot(1:11,linspace(0,ii,11),'-r');
end

for ii = 30:50
    h(2) = plot(1:11,linspace(0,ii,11),'-b');
end

for ii = 70:80
    h(3) = plot(1:11,linspace(ii,25,11),'-k');
end

set(gca,'Box','on','Layer','top','Visible','on','Xlim',[1 11],'Ylim',[-1 80]); 
legend(h,'A','B','C');

hold off;

Output

实际上,我所做的很简单。我使用gobjects function创建了一个大小为3的图形对象数组(每次迭代一个)。然后,在每次迭代中,我将最后绘制的行分配给其各自的数组占位符。最后,我使用之前存储的三个图形对象创建了图例。

可替换地:

clear();

figure();
hold on;

h1 = gobjects(20,1);

for ii = 1:20
    h1(ii) = plot(1:11,linspace(0,ii,11),'-r');
end

h2 = gobjects(21,1);

for ii = 30:50
    h2(ii-29) = plot(1:11,linspace(0,ii,11),'-b');
end

h3 = gobjects(11,1);

for ii = 70:80
    h3(ii-69) = plot(1:11,linspace(ii,25,11),'-k');
end

set(gca,'Box','on','Layer','top','Visible','on','Xlim',[1 11],'Ylim',[-1 80]); 
legend([h1(1) h2(1) h3(1)],'A','B','C');

hold off;

您可以创建一个图形对象数组,用于存储每次迭代生成的绘图处理程序。然后使用每个图形对象数组的第一个(基本上是任意)项创建图例。