MatLab图例中多个项目的处理和消除
我目前想有图形的图例,但是我绘制了几条线,这些线应该只有3种类型 我目前的选择是在边界外使用虚拟绘图,绘制相关数据,并在末尾调用图例。它可以工作,但容易出错。我想更新图例,只选择几个情节 我试图使用MatLab图例中多个项目的处理和消除,matlab,plot,legend,Matlab,Plot,Legend,我目前想有图形的图例,但是我绘制了几条线,这些线应该只有3种类型 我目前的选择是在边界外使用虚拟绘图,绘制相关数据,并在末尾调用图例。它可以工作,但容易出错。我想更新图例,只选择几个情节 我试图使用leg\u handle.String,但随后出现了两个问题: 它仍然打印5个句柄,而不是3个 它没有正确的线条样式和颜色 有什么想法吗 下面是代码(带注释的虚拟图)和当前版本的图片,给出了错误和我想要查看的内容 clear figure() hold on %using %dummy plot
leg\u handle.String
,但随后出现了两个问题:
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]);
它提供了什么:
我期望得到的:
我尝试过使用
[a,b,c,d]=legend
,但这只提供了我已经使用过的a
句柄。这个小解决方法应该可以完成以下工作:
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;
事实上,我做的很简单。我使用创建了一个大小为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;
创建一个图形对象数组,用于存储每次迭代生成的打印处理程序。然后,使用每个图形对象数组的第一个(基本上是任何)项创建图例。我不知道
gobjects
,这种方法正是我想要的。已经在用了。碰巧,你们知道为什么我使用leg\u handle.String
时它会给出错误的输出吗?若你们看到leg\u hand.String
在使用你们的方法创建图例之后包含了什么,你们会注意到它类似于{'data1'…'data50'}
。问题是图例中已经包含了太多的句柄条目,它们的名称不是您要查找的。您可以更改显示的字符串、数据和元素数,但这不会使图例正确。请查看答案。@Dev-iL,谢谢。你的方法也很有趣。