Azzera filtri
Azzera filtri

Adding a legend manually for a plot generated by a loop

1 visualizzazione (ultimi 30 giorni)
Hi,
I am generating a plot in Matlab one point at a time depending on how a condition is satisfied within a loop:
for i=1:size(Ind,1)
if(Ind(i)==1)
c='ro';
elseif(Ind(i)==2)
c='bo';
elseif(Ind(i)==3)
c='go';
end
plot(i,Y(i),c) %plotting some other value with the color chosen.
hold on
end
How do I add a legend entry to this? I want to associate the index position(1,2 and 3) to red,blue and green in the legend.
Thanks!

Risposta accettata

jgg
jgg il 26 Gen 2016
Modificato: jgg il 26 Gen 2016
I think the issue is that you don't want to generate the plot like that; it's slow and makes it hard to label. Check out this solution instead:
Y = 10*rand(100,1); %your data
Ind = rand(100,1) > 0.5;
Ind = Ind + (rand(100,1) > 0.75);
Ind = Ind + 1; %an index corresponding to the group/colour of Y
Vals = [1:100]'; %the X-axis, or location of Y
plot(Vals(Ind == 1),Y(Ind ==1), 'ro', Vals(Ind == 2), ...
Y(Ind == 2), 'bo', Vals(Ind == 3), Y(Ind == 3), 'go')
legend('Red Data', 'Blue Data', 'Green Data')
This is much more efficient and you don't have to loop over all your points.
So, in your example, you would just go:
i = [1:size(Ind,1)];
plot(i(Ind == 1),Y(Ind ==1), 'ro', i(Ind == 2), ...
Y(Ind == 2), 'bo', i(Ind == 3), Y(Ind == 3), 'go')
legend('Red Data', 'Blue Data', 'Green Data')

Più risposte (0)

Prodotti

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by