2012-10-15 14 views
6

Ho la seguente immagine:Matlab - come fare una leggenda personalizzato

enter image description here

E vorrei fare una leggenda per esso. Fondamentalmente, voglio fare una legenda per ogni tipo di rettangolo. Nella casella leggenda, voglio segnare ogni linea di colore a seconda del tipo di corpo che segna:

  • linea verde: testa
  • linea gialla: torso
  • linea viola: braccio destro
  • linea azzurra: il braccio sinistro
  • linea rossa: gamba sinistra
  • linea blu: gamba destra

Questo è fondamentalmente personalizzato, perché ho più rettangoli di ogni tipo. Come posso fare una legenda personalizzata e collegarla alla figura che disegna questa immagine?

risposta

2

Il modo più semplice che riesco a pensare è quello di tracciare prima un rettangolo di ogni tipo e costruire una legenda solo per rettangoli univoci. Così:

figure; 
hold on; 

% unique rectangles 
plot(rand(1, 10), 'b'); 
plot(rand(1, 10), 'g'); 

% the rest 
plot(rand(1, 10), 'b'); 
plot(rand(1, 10), 'g'); 

% use normal legend with only as many entries as there are unique rectangles 
legend('Blue', 'Green'); 

Avrete molte linee dello stesso colore, ma una leggenda solo per colori unici.

7

Ci sono 2 modi per procedere. Potresti creare i tuoi quadrati e poi assegnarli a un hagguppo. In questo modo non hai più elementi per ogni colore. Qualcosa di simile a questo:

hold on 
for ii = 1:4 
    hb(ii) = plot(rand(1,2), rand(1,2),'color','r'); 
end 

hg = hggroup; 
set(hb,'Parent',hg) 
set(hg,'Displayname','Legs') 

legend(hg) 

Oppure si potrebbe creare oggetti fittizi, come questo:

hold on 
for ii = 1:4 
    hb(ii) = plot(rand(1,2), rand(1,2),'color','r'); 
end 

p = plot([],[],'r'); 

legend(p,'Legs') 

Il primo è un po 'più elegante.

2

vorrei aggiungere alla risposta di dvreed77 sull'uso hggroup che per l'uso leggenda pulito, ho anche bisogno di impostare la 'IconDisplayStyle' (Matlab R2014a), in modo tale che:

%4 kinds of lines: 
n_areas = 4; 
n_lines = 10; 

%use built-in color map 
cmap = hsv(n_areas); 

%plot lines and generate handle vectors 
h_fig = figure; 
hold on 
h_lines = zeros(1,n_lines); 

for l = 1:n_areas 

    for k = 1:n_lines 
    h_lines(k) = plot(rand(1,2), rand(1,2),'Color',cmap(l,:)); 
    end 

    %Create hggroup and set 'icondistplaystyle' to on for legend 
    curPlotSet = hggroup; 
    set(h_lines,'Parent',curPlotSet); 
    set(get(get(curPlotSet,'Annotation'),'LegendInformation'),... 
     'IconDisplayStyle','on'); 
end 

%Now manually define legend label 
legend('heads','legs','hands','feet') 
+2

Grazie per il downvote, sono abbastanza sicuro che sia comunque una risposta utile ^. ^ –

1

solo disegnare puntini leggenda di fuori la trama:

figure; 
plot(-1,-1,'gs',-1,-1,'b^',-1,-1,'ro'); 
legend('x1','x2','x3','Location','NorthWest'); 
xlim([0,1]); ylim([0,1]); 
Problemi correlati