2015-07-18 6 views
6

Sie wissen sicher einen schnellen Weg, wie ich die Grenzen meiner Figur aufspüren kann, nachdem ich gezoomt habe? Ich würde gerne die Koordinaten genau wissen, damit ich die Figur mit ax.set_xlim und ax.set_ylim reproduzieren kann. Ich verwende das Standard-qt4agg-Backend.Matplotlib: xlim und ylim nach dem Zoom herausfinden

edit: Ich weiß, dass ich den Cursor verwenden kann, um die beiden Positionen in der unteren und oberen Ecke zu finden, aber vielleicht gibt es einen formellen Weg, das zu tun?

+0

Sie können 'ax.get_xlim' und' ax.set_ylim' an die Grenzen abrufen. – hitzg

Antwort

16

matplotlib verfügt über eine Ereignisbehandlungs-API, mit der Sie Aktionen wie die, auf die Sie sich beziehen, nutzen können. Die Seite Event Handling gibt einen Überblick über die Ereignis-API, und auf der Seite Axes gibt es eine (sehr) kurze Erwähnung der Ereignisse x- und y-limits.

In Ihrem Szenario möchten Sie Rückruffunktionen auf den Axes Objekt xlim_changed und ylim_changed Ereignisse registrieren. Diese Funktionen werden immer dann aufgerufen, wenn der Benutzer das Ansichtsfenster vergrößert oder verkleinert.

Hier ist ein Mindestarbeitsbeispiel:

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

Dieses Beispiel funktioniert nicht für Python 3. Auch wenn 'print's und' xrange' korrigiert werden, erzeugt 'axis.get_xlim() 'keine Werte. – eatcrayons

+1

@eatcrayons Das ist korrekt, weil "Achsen" nicht definiert sind; Es muss 'ax.get_xlim()' sein - Ich habe die Antwort bearbeitet. – ImportanceOfBeingErnest

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

Dies ist wahrscheinlich nicht das, wonach OP gefragt hat; Meiner Erfahrung nach geben diese Funktionen die von set_xlim() angegebenen Grenzwerte zurück, ohne jedoch zu wissen, welche Ansicht der Benutzer danach manuell verschoben/gezoomt hat. – dominecf

+1

Warum funktioniert dann die angenommene Antwort? Es verwendet auch '.get_xlim'. –

+1

Ja, diese Antwort ist richtig in dem Sinne, dass 'ax.get_xlim()' die aktuellen Grenzen des Diagramms zu jedem Zeitpunkt zurückgibt, auch nach dem Zoomen. Wenn man also mit der Figur interagieren und einen solchen Befehl interaktiv aufrufen kann, z.B. In einer IPython-Sitzung funktioniert das einwandfrei. Wenn das Diagramm von einem Skript erstellt wird, haben Sie diese Option normalerweise nicht; In diesem Fall zeigt die andere Antwort, wie die erforderlichen Ereignisse verwendet werden, um die Grenzwerte auszudrucken. – ImportanceOfBeingErnest

Verwandte Themen