Matplotlib / Pyplot: как увеличить масштаб сюжета - PullRequest
61 голосов
/ 17 ноября 2010

У меня есть графики данных временных рядов 3-осевого акселерометра (t, x, y, z) на отдельных вспомогательных участках, которые я хотел бы увеличить вместе. То есть, когда я использую инструмент «Масштабировать прямоугольник» на одном графике, когда я отпускаю мышь, все 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

Ответы [ 3 ]

95 голосов
/ 17 ноября 2010

Самый простой способ сделать это - использовать ключевые слова 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(...)
14 голосов
/ 20 сентября 2017

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

fig, ax = plt.subplots(3, 1, sharex=True, sharey=True)
0 голосов
/ 06 января 2015

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

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