2015-11-02 29 views
11

desidero inserire una leggenda che non è legato al grafico di sorta:Aggiungere leggenda personalizzato senza alcuna relazione con il grafico

figure; 
hold on; 
plot(0,0,'or'); 
plot(0,0,'ob'); 
plot(0,0,'ok'); 
leg = legend('red','blue','black'); 

Ora desidero aggiungerlo a un'altra figura:

figure; 
t=linspace(0,10,100); 
plot(t,sin(t)); 
%% ADD THE LEGEND OF PLOT ABOVE 
+0

questo è un semplice esempio di una cosa più grande che ho quindi quello che suggerisci non è rilevante, ci deve essere un modo per farlo – jarhead

+0

Quindi non è chiaro cosa si vuole raggiungere. Potete fornire maggiori informazioni? Perché hai bisogno della legenda se non ci sono dati correlati nella trama. – NKN

+0

quello che voglio ottenere è esattamente ciò che ho scritto, usare la scatola con la legenda della prima figura e visualizzarla sulla seconda – jarhead

risposta

17

Ecco come ho risolto questo problema in passato:

figure 
t=linspace(0,10,100); 
plot(t,sin(t)); 
hold on; 

h = zeros(3, 1); 
h(1) = plot(NaN,NaN,'or'); 
h(2) = plot(NaN,NaN,'ob'); 
h(3) = plot(NaN,NaN,'ok'); 
legend(h, 'red','blue','black'); 

Ciò tracciare i punti aggiuntivi, ma perché le coordinate sono a NaN non saranno visibili sulla stessa trama:

enter image description here

EDIT 26/10/2016: miei risultati risposta originali voci di legenda in grigio in 2016b.Il codice aggiornato sopra funziona, ma la risposta che segue è rilevante solo pre-2016b:

figure 
t=linspace(0,10,100); 
plot(t,sin(t)); 
hold on; 

h = zeros(3, 1); 
h(1) = plot(0,0,'or', 'visible', 'off'); 
h(2) = plot(0,0,'ob', 'visible', 'off'); 
h(3) = plot(0,0,'ok', 'visible', 'off'); 
legend(h, 'red','blue','black'); 

Ciò tracciare i punti aggiuntivi, ma non sarà visibile sulla trama stessa.

È inoltre possibile utilizzare copyobj per copiare elementi grafici da una figura all'altra se si dispone di un sacco di elementi, quindi utilizzare set(x, 'visible', 'off') di nasconderli prima di mostrare la leggenda, ma dipende da ciò che la vostra applicazione finale.

+0

come commentato sopra u puoi usare NaN, e poi non hai bisogno di usare la maniglia visibile – jarhead

+0

Su matlab r2016b, la legenda di un complotto invisibile diventa grigia. – vindarmagnus

+1

@vindarmagnus, ahi, sì, hai ragione! Ho aggiornato la mia risposta per usare le coordinate di 'NaN' invece di trame invisibili, come suggerito da jarhead e Hoki nei commenti. – zelanix

3

La tua domanda è un po 'oscura. Tuttavia, la prima cosa che ho pensato durante la lettura è stata la funzione text in Matlab.

È possibile utilizzare la funzione text per aggiungere testo a una figura Matlab. E 'di utilizzo è

>> text(x, y, str); 

dove x e y sono le coordinate della figura in cui si desidera aggiungere il testo str. È possibile utilizzare l'opzione Color di text per i colori e TeX per disegnare linee o anche _. Sono diventato molto creativo con i grafici usando il testo.

Ecco un esempio rapido e sporco di emulare un legend con text

x = 0:pi/20:2*pi; 
y = sin(x); 
plot(x,y) 
axis tight 

legend('sin(x)'); 

text(5.7, 0.75, 'sin(x)'); 
text(5.1, 0.78, '_____', 'Color', 'blue'); 

che produce

                          <code>text</code> example

In questo caso specifico è possibile utilizzare il comando specifico (indicato da @Hoki nei commenti).

ht = text(5, 0.5, {'{\color{red} o } Red', '{\color{blue} o } Blue', '{\color{black} o } Black'}, 'EdgeColor', 'k'); 

per produrre

                          <code>text</code> example

recuperando la maniglia per l'oggetto text diventa banale per copiare in una nuova figura, copyobj(ht, newfig). [1]

+0

Tuttavia 'testo' non fornisce il colore e il formato forniti dalla legenda. – NKN

+0

Puoi usare l'opzione 'Colore' di' testo' per i colori e TeX per disegnare linee o anche '_'. Sono diventato molto creativo con i grafici usando 'text'. – IKavanagh

+0

I suoni sono interessanti, potresti dare un piccolo esempio di sintassi 'TeX' e' Color' in oggetti 'text'? – Hoki