处理和消除 MatLab 图例中的多个条目
Posted
技术标签:
【中文标题】处理和消除 MatLab 图例中的多个条目【英文标题】:Handling and eliminating multiples entries in MatLab legend 【发布时间】:2018-08-19 18:50:40 【问题描述】:我目前想要图例,但是我正在绘制几条线,应该只分成 3 种类型。
我目前的选择是在边界之外使用 虚拟图,绘制相关数据并在最后调用图例。它有效,但容易出错。我想更新图例并只选择一些图。
我尝试使用leg_handle.String
,但是出现了两个问题:
它仍然绘制 5 个句柄而不是 3 个。
它没有正确的线条样式和颜色。
有什么想法吗?
按照代码(带有虚拟情节注释)和当前版本的图片给出错误以及我想要查看的内容。
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
的this method,但这只给出了我已经在使用的a
句柄。
【问题讨论】:
看看this的回答。 @Dev-iL,谢谢。你的方法也很有趣。 【参考方案1】:这个小解决方法应该可以完成工作:
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;
其实我做的很简单。我使用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;
您创建一个图形对象数组,用于存储每次迭代产生的绘图处理程序。然后使用每个图形对象数组的第一个(基本上是任何)项创建图例。
【讨论】:
我不知道gobjects
,这种方法绝对是我正在寻找的。已经在使用它了。有机会,您知道为什么当我使用leg_handle.String
时它会给出错误的输出吗?
如果您在使用您的方法创建图例后看到leg_hand.String
包含的内容,您会注意到它类似于'data1' ... 'data50'
。问题是图例已经包含太多句柄条目,它们的名称不是您要查找的。您可以更改字符串、数据和显示的元素数量,但这不会使您的图例正确。以上是关于处理和消除 MatLab 图例中的多个条目的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB Plot - 多个数据行的图例条目 - getcolumn