2012-10-15 19 views
8

Ho cercato un modo per essere in grado di selezionare quali serie sono visibili su un grafico, dopo aver creato un grafico.Selezione interattiva di serie in un grafico matplotlib

Ho bisogno di questo come spesso ho trame con molte serie. sono troppi per tracciare allo stesso tempo e ho bisogno di selezionare rapidamente e in modo interattivo quali serie sono visibili. Idealmente ci sarà una finestra con un elenco di serie nel grafico e caselle di controllo, dove è visibile la serie con la casella di controllo selezionata.

Qualcuno sa se questo è già stato implementato da qualche parte ?, se no allora qualcuno può guidarmi su come posso farlo da solo?

Grazie!

Omar

risposta

8

Tutto dipende da quanto sforzo si è disposti a fare e ciò che il requisiti precisi sono, ma puoi scommettere che è già stato implementato da qualche parte :-)

Se l'obiettivo è principalmente quello di non ingombrare l'immagine, potrebbe essere sufficiente utilizzare le funzionalità integrate; è possibile trovare il codice corrispondente nella libreria esempi matplotlib:

Se si vuole veramente avere un interfaccia utente, in modo da poter custodire le prestazioni limitando la quantità di lotti/dati, in genere utilizzi un toolbox GUI come GTK, QT o WX. Guarda qui per un po 'di articoli e esempio di codice:

2

un elenco con le caselle di controllo andrà bene se si dispone di un paio di trame o meno, ma per più trame un menu a comparsa sarebbe probabilmente meglio. Non sono sicuro se uno di questi è possibile con Matplotlib però.

Il modo in cui l'ho implementato una volta era utilizzare un dispositivo di scorrimento per selezionare la trama da un elenco: in pratica si utilizza il cursore per impostare l'indice della serie da mostrare. Avevo poche centinaia di serie per set di dati, quindi era un buon modo per guardarle rapidamente.

Il mio codice per impostare questa funzione era grosso modo così:

fig = pyplot.figure() 
slax = self.fig.add_axes((0.1,0.05,0.35,0.05)) 
sl = matplotlib.widgets.Slider(slax, "Trace #", 0, len(plotlist), valinit=0.0) 
def update_trace(): 
    ax.clear() 
    tracenum = int(np.floor(sl.val)) 
    ax.plot(plotlist[tracenum]) 
    fig.canvas.draw() 
sl.on_changed(update_trace) 
ax = self.fig.add_axes((0.6, 0.2, 0.35, 0.7)) 
fig.add_subplot(axes=self.traceax) 
update_trace() 

Ecco un esempio:

Plot image

Problemi correlati