MATLAB中Legend的一些控制方法

转载 2012年03月29日 20:40:06

如果一个图中我们画了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');

MATLAB中Legend的一些控制方法

http://blog.sina.com.cn/s/blog_551d8bdb01015kw2.html 如果一个图中我们画了n条曲线,但是我们只想加图例说明(legend)的只有m条 (m   ...
  • a573233077
  • a573233077
  • 2015年06月20日 20:38
  • 11538

matlab中legend函数的用法

 legend  legend('string1','string2',...)  legend(h,'string1','string2',...)  legend(M)  legen...
  • honglin_ren
  • honglin_ren
  • 2014年07月17日 16:31
  • 34040

Matlab中plot函数及legend函数详解

[转载],转自:http://blog.sina.com.cn/s/blog_7dcfa8ea0100tvnf.html Matlab中plot函数及legend函数详解 Ma...
  • faver2014
  • faver2014
  • 2015年04月04日 08:50
  • 918

Matlab画图 包含多个legend

没时间闲扯了,直接上代码吧。x = 0:0.01:3;y1 = sin(x); y2 = sin(x).^2; y3 = sin(x).^sin(x); y4 = cos(x).*sin(x);plo...
  • bendanban
  • bendanban
  • 2016年10月04日 22:08
  • 807

matlab 的legend的任意标注

legend在画图中经常用到,但是如果直接legend('图形1‘,‘图形2','图形3');最终所得的标注是按照画图的先后顺序,也就是说假定我plot了3个点,那么legend就会一次标注这些点 但...
  • fengsigaoju
  • fengsigaoju
  • 2016年08月18日 16:05
  • 1205

matlab 不显示特定legend2

a=findobj(gca, 'Type', 'patch');               hasbehavior(a(1),'legend',false);               ...
  • drbinzhao
  • drbinzhao
  • 2016年10月19日 18:41
  • 1515

matlab 如何创建多个legend

代码如下: x = -pi:pi/20:pi; p1=plot(x,cos(x),'-ro'); hold on p2=plot(x,sin(x),'-.b') [legh,objh,out...
  • xkl7111
  • xkl7111
  • 2017年09月27日 11:53
  • 338

用Matlab作图时,选择某些图元素不显示legend的方法

这是个很小的问题,但是遇到了就记录一下。我们有些时候需要用Matlab做比较复杂的图,但是并不是图上的所有东西都要在legend中标出图例,那么这时候就需要忽略一些图例的显示,用下面的方法就可以做到:...
  • qysh123
  • qysh123
  • 2014年01月26日 21:41
  • 3427

在matlab中调整legend的位置

  • xiaoshengforever
  • xiaoshengforever
  • 2014年09月25日 22:26
  • 4660

matlab绘图时legend显示分式(latex风格)

需求用matlab绘图时,希望legend命令显示分式,如z=x222+y242z=\frac{{x^2}}{{2^2}}+\frac{{y^2}}{{4^2}} 然而直接调用legend(‘z=(...
  • xiongly123
  • xiongly123
  • 2017年07月30日 00:23
  • 424
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MATLAB中Legend的一些控制方法
举报原因:
原因补充:

(最多只允许输入30个字)