2015-03-15 11 views
5

sto generando più appezzamenti di diverse serie di dati in successione con MATLAB. Vorrei che le posizioni delle legende fossero tali da non sovrapporsi alle linee tracciate e sarebbe ideale se questa posizione potesse essere eseguita automaticamente.Luogo MATLAB leggenda in modo tale che non si sovrappone sulla trama

sono consapevole di impostare il 'Location'-'best' per raggiungere questo obiettivo, ma la collocazione della leggenda tende ad essere imbarazzante quando 'best' viene usato (in basso). Inoltre, vorrei che la leggenda fosse all'interno della trama. Mi sono anche imbattuto in un modo per rendere trasparente la legenda (here) in modo da non rendere invisibili i dati tracciati, ma posizionare esplicitamente la legenda altrove è ciò che sto cercando. The awkwardly placed legend

Esiste un modo per posizionare la legenda agli estremi dell'immagine ('NorthWest', 'SouthWest' ecc) automaticamente in modo tale che non si sovrappone ai dati tracciati (parte dai metodi suggeriti sopra)?

+1

Forse potresti usare la proprietà 'Position' invece di' Location'? Ciò richiederebbe qualche piccolo aggiustamento. Quello che potresti fare è fare un elenco di, ad esempio, 4-6 posizioni in cui ritieni che la posizione sia OK, quindi controlla i tuoi dati per queste posizioni. Nel grafico dato, ad esempio, non è troppo difficile calcolare che per i primi 5 valori x è disponibile la gamma inferiore del grafico, e quindi sarebbe un posto adatto per mettere la legenda. –

+1

Non posso provarlo adesso - ma se tu usassi "best", determini la posizione della legenda (sono sicuro che sia una proprietà che puoi leggere), capisci quale è l'angolo più vicino e poi lo fai scorrere? Dovrebbe essere possibile creare una piccola funzione che chiami con gli assi desiderati come argomento. – Floris

risposta

0

Quindi, lei ha provato ad utilizzare Location invece di Position? Ad esempio:

x =1:100; 
y = x.^2; 
lgd = legend('y = x.^2'); 
set(lgd,'Location','best') 

e stai ottenendo risultati strani corretti? Un modo rapido per risolvere questo sarebbe utilizzare ancora Location, con best, ed estrarre le coordinate:

lgd.Position 

Si dovrebbe ottenere qualcosa di simile:

ans = 

    0.7734 0.3037 0.1082 0.0200 

che associa a:

[left bottom width height] 

Sarà necessario mettere a fuoco a sinistra e in basso. Questi due valori, sinistro e inferiore, specificano la distanza dall'angolo inferiore sinistro della figura all'angolo inferiore sinistro della legenda e sono analoghi alla cornice della griglia che si sta utilizzando.

Poi, a seconda delle dimensioni del telaio (suggerirei di usare axis([XMIN XMAX YMIN YMAX]) per questo, se possibile), è possibile individuare la posizione della legenda all'interno della griglia. Quello che puoi fare dopo, è controllare se e quale dei tuoi grafici nella trama incrocia con la legenda (magari definire una funzione di distanza relativa basata su una certa soglia di distanza) e se lo fanno, quindi riposizionare casualmente la legenda (cioè cambiare i valori di left e bottom) e ripetere fino a quando le condizioni sono soddisfatte.

Se ancora ti turba Riesco a scrivere una breve frammento. Infine, sappi che puoi sempre scegliere di mettere la legenda all'esterno:

set(lgd,'Location','BestOutside') 
Problemi correlati