我有一个情节,我把它放在一个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)?
谢谢!
答案 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))
给我们:
请注意,我已使用了绘图对象的'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'});