2015-07-18 10 views
6

si sa per certo in modo veloce come posso rintracciare i limiti della mia figura dopo aver ingrandito? Mi piacerebbe conoscere le coordinate con precisione in modo da poter riprodurre la figura con ax.set_xlim e ax.set_ylim. Sto usando il backend qt4agg standard.Matplotlib: Scoprire xlim e ylim dopo lo zoom

modifica: so che posso usare il cursore per scoprire le due posizioni nell'angolo inferiore e superiore, ma forse c'è un modo formale per farlo?

+0

È possibile utilizzare '' ax.get_xlim' e ax.set_ylim' per recuperare i limiti. – hitzg

risposta

16

matplotlib ha un'API per la gestione degli eventi che è possibile utilizzare per collegare azioni come quelle a cui si sta facendo riferimento. La pagina Event Handling fornisce una panoramica dell'API degli eventi e una (molto) breve menzione degli eventi dei limiti x e y sulla pagina .

Nello scenario, si desidera registrare le funzioni di richiamata sugli eventi Axes dell'oggetto xlim_changed e ylim_changed. Queste funzioni verranno chiamate ogni volta che l'utente ingrandisce o sposta la vista.

Ecco un esempio di lavoro minima:

import matplotlib.pyplot as plt 

# 
# Some toy data 
x_seq = [x/100.0 for x in xrange(1, 100)] 
y_seq = [x**2 for x in x_seq] 

# 
# Scatter plot 
fig, ax = plt.subplots(1, 1) 
ax.scatter(x_seq, y_seq) 

# 
# Declare and register callbacks 
def on_xlims_change(axes): 
    print "updated xlims: ", ax.get_xlim() 

def on_ylims_change(axes): 
    print "updated ylims: ", ax.get_ylim() 

ax.callbacks.connect('xlim_changed', on_xlims_change) 
ax.callbacks.connect('ylim_changed', on_ylims_change) 

# 
# Show 
plt.show() 
+0

Questo esempio non funziona per Python 3. Anche se 'print's e' xrange' sono corretti, 'axes.get_xlim()' non produce valori. – eatcrayons

+1

@eatcrayons Corretto, perché 'assi' non è definito; deve essere 'ax.get_xlim()' - Ho modificato la risposta. – ImportanceOfBeingErnest

0
print ax.get_xlim(), ax.get_ylim() 
+1

Questo probabilmente non è quello che l'OP stava chiedendo; nella mia esperienza, queste funzioni restituiscono i limiti dati da set_xlim(), ma non sono consapevoli di quale vista l'utente ha successivamente modificato/ingrandito manualmente. – dominecf

+1

Allora perché la risposta accettata funziona? Utilizza anche '.get_xlim'. –

+1

Sì, questa risposta è corretta nel senso che 'ax.get_xlim()' restituirà i limiti attuali del grafico in qualsiasi momento, anche dopo lo zoom. Quindi, se si è in grado di interagire con la figura e chiamare tale comando in modo interattivo, ad es. in una sessione IPython, funziona bene. Se la trama è prodotta da uno script, di solito non hai questa opzione; in questo caso l'altra risposta mostra come utilizzare gli eventi necessari per poter stampare i limiti. – ImportanceOfBeingErnest

Problemi correlati