2010-11-17 20 views
47

Mam działki 3-osiowych danych z szeregów czasowych akcelerometru (t, x, y, z) w osobnych partiach, które chciałbym powiększyć razem. Oznacza to, że kiedy używam narzędzia "Powiększ do prostokąta" na jednym wykresie, po zwolnieniu myszy wszystkie 3 działki powiększają się razem.Matplotlib/Pyplot: Jak powiększać subplots razem?

Poprzednio po prostu wykreśliłem wszystkie 3 osie na jednym wykresie przy użyciu różnych kolorów. Jest to jednak przydatne tylko przy niewielkich ilościach danych: mam ponad 2 miliony punktów danych, więc ostatnia oś naniesiona przesłania pozostałe dwa. Stąd potrzeba oddzielnych wątków.

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ć, jaki zoom był wymagany na jednym wątku i jak go powielić na pozostałych dwóch wątkach.

Podejrzewam, mam wszystkie kawałki, a wystarczy, że jedna ostatnia cenna wskazówka ...

-BobC

Odpowiedz

75

Najprostszym sposobem na to jest za pomocą sharex i/lub sharey słów kluczowych podczas tworzenia osie:

from matplotlib import pyplot as plt 

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

Podejrzewałem, że będzie to proste, ale nie takie proste. Dzięki! – BobC

+0

Rozwiązałem mój problem z wielokanałowymi szeregami czasowymi! Wspaniały! – heltonbiker

-1

Interaktywnie to działa na oddzielnych osiach

for ax in fig.axes: 
    ax.set_xlim(0, 50) 
fig.draw() 
2

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

fig, ax = plt.subplots(3, 1, sharex=True, sharey=True) 
Powiązane problemy