跳过for循环图中的图例

时间:2017-09-19 19:02:21

标签: matlab for-loop plot legend

我有一个情节,我把它放在一个for循环中如下:

for i=1:300

    h3 = figure(3);
    hold on
    h3=plot(MC_Tx{:,i},MC_Ty{:,i},MC_Dx{:,i},MC_Dy{:,i},MC_Mx{:,i},MC_My{:,i})
plot(Mx_T,My_T,'-mo','MarkerEdgeColor','k','MarkerFaceColor',[.49 1 .63],'MarkerSize',5)
    h3 = title('Target and Missile Trajectory');set(h3,'Interpreter','latex');
    h3 = xlabel('Downrange [m]');set(h3,'Interpreter','latex');
    h3 = ylabel('Altitude [m] ');set(h3,'Interpreter','latex');
    grid on

    h4 = figure(4);
    hold on
    plot(MC_Time{:,i},MC_LAMBDT{:,i},MC_Time{:,i},MC_LAMBDD{:,i})
    h4 = title('$$\dot{\lambda_{T}}(t)$$ and $$\dot{\lambda_{D}}(t)$$ vs Time');set(h4,'Interpreter','latex');
    h4 = ylabel('$$\dot{\lambda_{T}}(t)$$ and $$\dot{\lambda_{D}}(t)$$ [rad/s]');set(h4,'Interpreter','latex');
    h4 = xlabel('Time [s]');set(h4,'Interpreter','latex');
    if i == 300
        h4 = legend('$$\dot{\lambda_{T}}(t)$$','$$\dot{\lambda_{D}}(t)$$');set(h4,'Interpreter','latex');
    end
    grid on

end

然而,大多数线条相互叠加,我只能看到其中一条是最后一条。

如何在循环中只有几个数字的情况下,仅为最后一行打开图例(这意味着i = 300)?

谢谢!

2 个答案:

答案 0 :(得分:1)

legend接受graphics handle input,因此您可以在循环结束后传递绘图对象(如Chart Line返回的plot)。

例如:

x = 1:10;

hold on
for ii = 1:10
    ls(ii) = plot(x, x*ii, 'DisplayName', sprintf('Plot %u', ii));
end
hold off

legend(ls(end-1:end))

给我们:

yay

请注意,我已使用了绘图对象的'DisplayName'属性,这允许您在绘图时为数据生成标签。这使您可以避免以后对标签进行硬编码,并且更容易支持动态图例创建。

答案 1 :(得分:0)

请试试这个,

figure(4);
for i=1:300  
hold on
h(i)=plot(MC_Time{:,i},MC_LAMBDT{:,i},MC_Time{:,i},MC_LAMBDD{:,i})     
end
title('$$\dot{\lambda_{T}}(t)$$ and $$\dot{\lambda_{D}}(t)$$ vs Time','interpreter','latex')
ylabel('$$\dot{\lambda_{T}}(t)$$ and $$\dot{\lambda_{D}}(t)$$[rad/s]','interpreter','latex')
xlabel('Time [s]','interpreter','latex')
legend([h(299) h(300)],{'$$\dot{\lambda_{T}}(t)$$','$$\dot{\lambda_{D}}(t)$$'},'interpreter','latex')
grid on
hold off

我没有数据可以绘制,但我尝试了一个简单的示例来可视化代码的工作原理。如果你运行简单的代码,(注意只显示第1行和第3行的图例)

figure(4);
x=1:5
for i=1:4    
h(i)=plot(x,x+i)
hold on
end
legend([h(1) h(3)],{'first','third'});

你得到的东西enter image description here