2017-09-19 1 views
0

Ich habe ein Grundstück, das ich in ein, wie folgend für Schleife setzen:überspringen Legende in for-Schleife Plot

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 

Allerdings legen die meisten Linien aufeinander, und ich kann nur 1 von ihnen sehen, welche ist Die Letzten.

Wie kann ich die Legende nur für die letzte Zeile einschalten (was bedeutet für i = 300) und dabei nur wenige Zahlen in der Schleife haben?

Vielen Dank!

+1

Was ist mit einem if-Test innerhalb Ihrer for-Schleife? – m7913d

+0

Das ist eigentlich eine Option! Ich frage mich, ob es eine andere Option gibt – Ben

Antwort

0

Bitte versuchen Sie dies,

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 

Ich habe keine Daten zu zeichnen, aber ich versuche, für Sie ein einfaches Beispiel zu visualisieren, wie der Code funktioniert. Wenn Sie einfach Code ausführen wie, (man beachte nur Legende für die Linien 1 und 3 dargestellt sind)

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

Sie erhalten etwas enter image description here

+0

Ich habe die Frage aktualisiert, da ich in Wirklichkeit komplexer bin. – Ben

+0

Sorry für die späte Antwort, ich denke, die gleiche Idee für die Lösung für die vorherige kann noch implementiert werden. Hast du versucht zu implementieren? Wenn ja, was hast du bekommen? –

1

legend ein graphics handle input akzeptiert, so dass Sie die Plot-Objekte (wie die Chart Line passieren kann zurückgegeben von plot) nach der Schleife endet.

Zum Beispiel:

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

Gibt uns:

yay

Bitte beachte, dass ich die 'DisplayName' Eigenschaft des Plots Objekt genutzt haben, mit dem Sie eine Beschriftung für die Daten zu erzeugen, ermöglicht zur Zeit der Handlung. Auf diese Weise können Sie vermeiden, dass Beschriftungen später hardcodiert werden müssen, und die dynamische Erstellung von Legenden wird einfacher unterstützt.