2017-09-19 3 views
0

J'ai un terrain que je mets dans une boucle comme suit:sauter légende pour le tracé de la boucle

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 

Cependant, la plupart des lignes laïcs sur l'autre et je peux voir que 1 d'entre eux qui est les derniers.

Comment puis-je activer la légende uniquement pour la dernière ligne (ce qui signifie pour i = 300) tout en ayant quelques chiffres dans la boucle?

Merci!

+1

Qu'en est-il d'un test if dans votre boucle for? – m7913d

+0

C'est en fait une option! Vous vous demandez s'il y a une autre option tho – Ben

Répondre

0

S'il vous plaît essayer,

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 

Je ne dispose pas de données à tracer, mais j'ai essayé pour vous un exemple simple pour visualiser comment le code fonctionne. Si vous exécutez le code simple comme, (notez que la légende pour les lignes 1 et 3 sont présentés)

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

Vous obtenez quelque chose enter image description here

+0

J'ai mis à jour la question car j'ai plus complexe en réalité. – Ben

+0

Désolé pour la réponse tardive, je pense que la même idée pour la solution pour le précédent peut encore être mis en œuvre. Avez-vous essayé de mettre en œuvre? Si oui, qu'avez-vous eu? –

1

legend accepte un graphics handle input, de sorte que vous pouvez passer les objets de terrain (comme le Chart Line retourné par plot) après la fin de la boucle.

Par exemple:

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

Donne-nous:

yay

Notez que j'ai utilisé la propriété 'DisplayName' de l'objet de la parcelle, ce qui vous permet de générer une étiquette pour les données à l'heure de l'intrigue. Cela vous permet d'éviter d'avoir à coder les étiquettes plus tard et de prendre en charge plus facilement la création de légendes dynamiques.