Matplotlib / Pyplot:如何一起放大子图?


81

我想将3轴加速度计时间序列数据(t,x,y,z)绘制在单独的子图中,我想将它们一起放大。也就是说,当我在一个图上使用“缩放到矩形”工具时,当我释放鼠标时,所有三个图一起缩放。

以前,我只是使用不同的颜色在一个绘图上简单地绘制了所有三个轴。但这仅在少量数据时有用:我有超过200万个数据点,因此绘制的最后一个轴使其他两个点变得模糊。因此,需要单独的子图。

我知道我可以捕获matplotlib / pyplot鼠标事件(http://matplotlib.sourceforge.net/users/event_handling.html),并且我知道可以捕获其他事件(http://matplotlib.sourceforge.net/api/backend_bases_api (.html#matplotlib.backend_bases.ResizeEvent),但我不知道如何知道在任何一个子图上请求了什么缩放,以及如何在其他两个子图上复制它。

我怀疑我已经掌握了一切,只需要最后一条宝贵的线索...

-鲍勃


IMO最好的文档是它们提供的示例代码:matplotlib.org/examples/pylab_examples/shared_axis_demo.html
Trevor Boyd Smith,

1
真正!当我问我的问题时,我希望该页面存在。很好,它现在在那里。
BobC

Answers:


120

最简单的方法是在创建轴时使用sharexand / orsharey关键字:

from matplotlib import pyplot as plt

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

33

plt.subplots如果是您的风格,您也可以使用。

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

-1

以交互方式在单独的轴上工作

for ax in fig.axes:
    ax.set_xlim(0, 50)
fig.draw()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.