Подтвердить что ты не робот

Matplotlib/Pyplot: Как объединить подсети?

У меня есть графики 3-х осевых акселерометров данных временного ряда (t, x, y, z) в отдельных подзаголовках, которые я хотел бы увеличить вместе. То есть, когда я использую инструмент "Zoom to Rectangle" на одном графике, когда я отбрасываю мышь, все 3 графика масштабируются вместе.

Раньше я просто рисовал все 3 оси на одном сюжете, используя разные цвета. Но это полезно только при небольших объемах данных: у меня более 2 миллионов точек данных, поэтому последняя очерченная графика скрывает два других. Отсюда необходимость в отдельных подзаговорах.

Я знаю, что могу захватить события мыши matplotlib/pyplot (http://matplotlib.sourceforge.net/users/event_handling.html), и я знаю, что могу поймать другие события (http://matplotlib.sourceforge.net/api/backend_bases_api.html # matplotlib.backend_bases.ResizeEvent), но я не знаю, как сказать, какой масштаб был запрошен на любом подзаголовке, и как его реплицировать на двух других подзаголовках.

Я подозреваю, что у меня есть все штуки, и мне нужен только один последний ценный ключ...

-BobC

4b9b3361

Ответ 1

Самый простой способ сделать это - использовать ключевые слова sharex и/или sharey при создании осей:

from matplotlib import pyplot as plt

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

Ответ 2

Вы также можете сделать это с помощью plt.subplots, если это ваш стиль.

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

Ответ 3

Интерактивно это работает на отдельных осях

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