zoukankan      html  css  js  c++  java
  • [ZZ] MATLAB中Legend的一些控制方法

    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');

  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/xfzhang/p/3593988.html
Copyright © 2011-2022 走看看