• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

[ZZ] MATLAB中Legend的一些控制方法 - 编著人

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

http://www.eetop.cn/blog/html/03/6503-23349.html

如果一个图中我们画了n条曲线,但是我们只想加图例说明(legend)的只有m条 (m<n)。网上可以搜索很到资料,但是涉及到版本兼容问题,有些比较新的句柄属性在老版本Matlab中就用不起来,比如lineseries中的Annotation属性在我使用的R14SP1中就无法使用。


1. 最简单,最超级无敌的方法:把想要标注的图形命令给个变量名,然后再legend命令中指定。

x = -3.14:0.1:3.14;
y1 = sin(x);
y2 = cos(x);
y3 = .1*exp(x);
y4 = y1.*y3;
hold on
h1 = plot(x, y1, \'r\');
h2 = plot(x, y2, \'g\');
h3 = plot(x, y3, \'k\');
h4 = plot(x, y4, \'m\');
hold off
xlim auto
legend([h1,h3],\'sin\', \'exp\');

2.通过控制Annotation属性来实现,详细控制方法参见http://www.mathworks.cn/help/techdoc/creating_plots/braliom.html;jsessionid=HPs0TNGQxP2TXMcZgQv4zkMvmSsZYbhG6Lwjd3JT271PLqXnHxhY!-1484299157。但是需要注意的是在稍微低版本的MATLAB中,并不提供Annotation的控制(至少我的R14SP1不支持)。

x = -3.14:0.1:3.14;
y1 = sin(x);
y2 = cos(x);
y3 = .1*exp(x);
y4 = y1.*y3;
hold on
h1 = plot(x, y1, \'r\');
h2 = plot(x, y2, \'g\');
h3 = plot(x, y3, \'k\');
h4 = plot(x, y4, \'m\');
hold off
xlim auto
set(get(get(h2, \'Annotation\'), \'LegendInformation\'), \'IconDisplayStyle\', \'off\');
set(get(get(h4, \'Annotation\'), \'LegendInformation\'), \'IconDisplayStyle\', \'off\');
legend(\'sin\', \'exp\');

3.多个legend以及标注部分图列构成多列图列

t=0:pi/100:2*pi; 
y1=sin(t); 
y2=cos(t); 
y3=y1.*y2; 
y4=0.5*(y1+y2); 
hold on 
h1=plot(t,y1,\'-r\') 
%h11 = plot(t(1:10:end),y1(1:10:end),\'o\',\'MarkerFaceColor\',\'r\',\'MarkerEdgeColor\',\'r\'); 
h11 = plot(t(1:20:end),y1(1:20:end),\'ro\'); 
h2=plot(t,y2,\'b-\'); 
%h22 = plot(t(1:10:end),y2(1:10:end),\'^\',\'MarkerFaceColor\',\'b\',\'MarkerEdgeColor\',\'b\'); 
h22 = plot(t(1:20:end),y2(1:20:end),\'b^\')
h3=plot(t,y3,\'c\'); 
h4=plot(t,y4,\'g\'); 
hold off 
[legh,objh,outh,outm]=legend([h1,h2],\'y1\',\'y2\',1); 
legend boxoff

% matlab 6.5.1 
%set(objh(3),\'marker\',\'*\'); 
%set(objh(5),\'marker\',\'.\');

% matlab7 
set(objh(4),\'marker\',\'o\'); 
set(objh(6),\'marker\',\'^\');


legh2=copyobj(legh,gcf); 
[legh2,objh2]=legend([h3,h4],\'y3\',\'y4\',2); 
legend boxoff

这样画好后,只有第二个legend可拖动,而第一个legend不可拖动,原因不明。

4.Matlab提供的legend函数,给出的legend经常覆盖了某些曲线,这样就需要把legend分成几个,相对独立,这样可以使用鼠标随意移动,确保不遮挡曲线。

a=linspace(0,2*pi,100);
y1=100*sin(a);
y2=50*cos(a);
y3=tan(a);
y4=log(a);
y=[y1;y2;y3;y4];
figure
p=plot(a,y)

legend(p(1:2),\'sin\',\'cos\');
ah=axes(\'position\',get(gca,\'position\'),...
            \'visible\',\'off\');
legend(ah,p(3:4),\'tan\',\'log\',\'location\',\'west\');

5.用plot函数对两个长度为30的向量分别绘制曲线的时候,在两条曲线上各画了一个marker(因为如果把所有的marker都放上去的话,感觉很拥挤,不是很好看),在对最终的画图效果做legend标注的时候,我希望将曲线及其上的marker一起标注

clc;
clear;
close all;

figure_handle = figure;
set(figure_handle, \'Color\', \'w\');
data=zeros(1, 100);
data(1) = 1;
data(2) = 1;
data(3) = 1;
t = [1 : 30] / 100 * 2 * pi;
cur1=real(fft(data) / 3);
cur1p = cur1(1 : 30);
h_1(1) = plot(t, cur1p, \'LineStyle\', \'-\', \'LineWidth\', 2, \'Color\', \'r\');
hold on
h_1(2) = plot(t(15), cur1p(15), \'LineStyle\', \'-\', \'LineWidth\', 2,  \'Color\', \'r\', \'Marker\', \'s\', \'MarkerSize\', 10, \'MarkerEdgeColor\', \'r\', \'MarkerFaceColor\', \'r\');
set(h_1, \'Parent\', hSGroup);
set(get(get(hSGroup, \'Annotation\'), \'LegendInformation\'), \'IconDisplayStyle\', \'on\'); 
cur2 = real(fft(data)) .* real(fft(data))/9;
cur2p = cur2(1 : 30);
h_2(1) = plot(t, cur2p, \'LineStyle\', \'-\', \'LineWidth\', 2, \'Color\', \'g\');
h_2(2) = plot(t(12), cur2p(12), \'LineStyle\', \'-\', \'LineWidth\', 2, \'Color\', \'g\', \'Marker\', \'o\', \'MarkerSize\',10, \'MarkerEdgeColor\', \'g\', \'MarkerFaceColor\', \'g\');
set(h_2, \'Parent\', hCGroup);
set(get(get(hCGroup, \'Annotation\'), \'LegendInformation\'), \'IconDisplayStyle\', \'on\'); 
legend(\'1 level\', \'2 levels\');


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap