Matplotlib / Pyplot: Wie kann man Nebenhandlungen zusammen zoomen?


81

Ich habe Diagramme von 3-Achsen-Beschleunigungsmesser-Zeitreihendaten (t, x, y, z) in separaten Unterzeichnungen, die ich zusammen zoomen möchte. Das heißt, wenn ich das Werkzeug "Auf Rechteck zoomen" für ein Diagramm verwende, zoomen alle 3 Diagramme zusammen, wenn ich die Maus loslasse.

Zuvor habe ich einfach alle 3 Achsen in einem einzigen Diagramm mit verschiedenen Farben gezeichnet. Dies ist jedoch nur bei kleinen Datenmengen nützlich: Ich habe über 2 Millionen Datenpunkte, sodass die letzte gezeichnete Achse die beiden anderen verdeckt. Daher sind separate Nebenhandlungen erforderlich.

Ich weiß, dass ich matplotlib / pyplot-Mausereignisse erfassen kann (http://matplotlib.sourceforge.net/users/event_handling.html), und ich weiß, dass ich andere Ereignisse erfassen kann (http://matplotlib.sourceforge.net/api/backend_bases_api) .html # matplotlib.backend_bases.ResizeEvent), aber ich weiß nicht, wie ich feststellen kann, welcher Zoom für einen Unterplot angefordert wurde und wie ich ihn auf den beiden anderen Unterplots replizieren soll.

Ich vermute, ich habe alle Teile und brauche nur diesen einen letzten wertvollen Hinweis ...

-BobC


IMO die beste Dokumentation ist der Beispielcode, den sie bereitstellen: matplotlib.org/examples/pylab_examples/shared_axis_demo.html
Trevor Boyd Smith

1
Wahr! Ich wünschte, diese Seite existiert, als ich meine Frage stellte. So gut, dass es jetzt da ist.
BobC

Antworten:


120

Der einfachste Weg, dies zu tun, ist die Verwendung der Schlüsselwörter sharexund / oder shareybeim Erstellen der Achsen:

from matplotlib import pyplot as plt

ax1 = plt.subplot(2,1,1)
ax1.plot(...)
ax2 = plt.subplot(2,1,2, sharex=ax1)
ax2.plot(...)

33

Sie können dies auch tun plt.subplots, wenn dies Ihr Stil ist.

fig, ax = plt.subplots(3, 1, sharex=True, sharey=True)

-1

Interaktiv funktioniert dies auf separaten Achsen

for ax in fig.axes:
    ax.set_xlim(0, 50)
fig.draw()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.