Matplotlib / Pyplot: Jak razem powiększać wykresy cząstkowe?

82

Mam wykresy danych szeregów czasowych przyspieszeniomierza 3-osiowego (t, x, y, z) w oddzielnych wykresach podrzędnych, które chciałbym razem powiększyć. Oznacza to, że kiedy używam narzędzia „Zoom to Rectangle” na jednym wykresie, po zwolnieniu przycisku myszy wszystkie 3 wykresy powiększają się razem.

Wcześniej po prostu kreśliłem wszystkie 3 osie na jednym wykresie przy użyciu różnych kolorów. Ale jest to przydatne tylko w przypadku małych ilości danych: mam ponad 2 miliony punktów danych, więc ostatnia narysowana oś przesłania pozostałe dwie. Stąd potrzeba oddzielnych działek pomocniczych.

Wiem, że mogę przechwytywać zdarzenia myszy matplotlib / pyplot (http://matplotlib.sourceforge.net/users/event_handling.html) i wiem, że mogę przechwytywać inne zdarzenia (http://matplotlib.sourceforge.net/api/backend_bases_api .html # matplotlib.backend_bases.ResizeEvent), ale nie wiem, jak określić, jakiego powiększenia zażądano na którymkolwiek z wątków podrzędnych i jak powielić to na pozostałych dwóch polach.

Podejrzewam, że mam wszystkie elementy i potrzebuję tylko tej ostatniej cennej wskazówki ...

-BobC

BobC
źródło
IMO najlepszą dokumentacją jest dostarczony przez nich przykładowy kod: matplotlib.org/examples/pylab_examples/shared_axis_demo.html
Trevor Boyd Smith
1
Prawdziwe! Chciałbym, żeby ta strona istniała, kiedy zadałem moje pytanie. Tak dobrze, że jest teraz.
BobC

Odpowiedzi:

121

Najłatwiej to zrobić, używając słów kluczowych sharexi / lub shareypodczas tworzenia osi:

from matplotlib import pyplot as plt

ax1 = plt.subplot(2,1,1)
ax1.plot(...)
ax2 = plt.subplot(2,1,2, sharex=ax1)
ax2.plot(...)
Promień
źródło
34

Możesz to również zrobić plt.subplots, jeśli to twój styl.

fig, ax = plt.subplots(3, 1, sharex=True, sharey=True)
Jeremy McGibbon
źródło
-1

Działa to interaktywnie na oddzielnych osiach

for ax in fig.axes:
    ax.set_xlim(0, 50)
fig.draw()
n1nj4
źródło