2013-04-26 17 views
5

Quanto segue è una parte del mio codice MATLAB. Come è mostrato, vorrei tracciare 8 curve in un grafico. Ma voglio fare ogni curva con un colore unico. Voglio anche cambiare la legenda in modo che cambi per ogni i.Come posso cambiare il colore del grafico in ogni iterazione in MATLAB?

Ad esempio, per i = 1 la legenda sarà gho-1, per i = 2 gho-2 e così via. Voglio che sia automatico perché cambierò il i a volte da ex: (i = 1: 20).

for i=1:8 
. 
. 
. 
plot(b,r,'b'); 
legend(['qho-',num2str(i)]);  
hold on 
end 

Come posso fare questo?

Ciao di nuovo,

ho altre domande: se ho il seguente

for i=1:8 
. 
b1=(1:3,:) 
b2=(3:6,:) 
figure(1);plot(b1,r,'*'); 
figure(2);plot(b2,r,'*'); 

Leg{i} = ['qho-',num2str(i)];  

end 
legend(Leg) 

ho ottenuto solo legenda dei colori per l'ultima unica figura. non per entrambi .. come posso risolvere quello ?!

Grazie ancora

+0

Si dovrebbe chiedere di follow-up domande come nuove domande – Dan

risposta

8

Basta usare hold all invece di hold on e mettere le etichette leggenda in un array di celle

hold all 
for i=1:8 
    . 
    . 
    . 
    plot(b,r); 

    Leg{i} = ['qho-',num2str(i)];  

end 
legend(Leg) 

Vedere questa domanda ad esempio: Sparse matrix plot matlab


NOTA:

Da Matlab R2014b in avanti, hold on è stato modificato per agire come hold all, ovvero modificare i colori dei grafici ogni volta che ne viene tracciata una. The docs indica che la sintassi hold all verrà rimossa nelle versioni future.

+0

Ojjj, grazie sooo molto. che funziona perfettamente :) :) :) .... – YSF

+0

'hold all' è una gemma nascosta che non molti conoscono. – shoelzer

+1

'hold all' limita comunque i colori stock, e quindi torna indietro. Se si desidera definire il proprio set di colori, è possibile aprire la figura e 'set (gca, 'ColorOrder', myColors)', dove 'myColors' è una matrice Nx3 di valori RGB. –

7

ne dite qualcosa di simile:

figure, hold on 
N = 8; 
h = zeros(N,1); %# store handle to line graphic objects 
clr = lines(N); %# some colormap 
for i=1:N 
    %# plot random data 
    y = cumsum(randn(100,1)); 
    h(i) = plot(y, 'Color',clr(i,:)); 
end 
hold off 
legend(h, num2str((1:N)','gho-%d')) %# display legend 

plot

+0

che è anche ottimo. tanti modi per scegliere :) :) .. grazie mille :) – YSF

+0

grazie! c'è un modo per fare il trucco con 'subplot''s in loop? 2 sottotrama su 1 figura, con grafici aggiuntivi per entrambi a ogni iterazione, ad es – soupault

Problemi correlati