Matplotlib / Pyplot: Як масштабувати підзаголовки разом?


82

У мене є графіки даних 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


ІМО найкраща документація - це приклад коду, який вони надають: matplotlib.org/examples/pylab_examples/shared_axis_demo.html
Тревор Бойд Сміт,

1
Правда! Я хотів би, щоб ця сторінка існувала, коли я задавав своє запитання. Так добре, що це там зараз.
BobC

Відповіді:


121

Найпростіший спосіб це зробити, використовуючи 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(...)


-1

Інтерактивно це працює на окремих осях

for ax in fig.axes:
    ax.set_xlim(0, 50)
fig.draw()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.