Matplotlib/Pyplot:如何同时缩放子图?

96
我有一些三轴加速度计时间序列数据(t,x,y,z)的图表,我希望它们能够一起缩放。也就是说,当我在一个图表上使用“矩形缩放”工具时,当我释放鼠标时,所有三个图表都会一起缩放。
以前,我只是在一个图表上绘制了所有三个轴,使用不同的颜色。但是这只适用于少量的数据:我有超过200万个数据点,所以最后一个轴会遮挡其他两个轴。因此需要单独的子图。
我知道我可以捕获matplotlib/pyplot的鼠标事件(链接1),我也知道我可以捕获其他事件(链接2),但是我不知道如何确定在任何一个子图上请求了什么样的缩放,并且如何在其他两个子图上复制它。
我怀疑我已经拥有了所有的要素,只需要最后一个宝贵的线索...
-BobC

在我看来,最好的文档是他们提供的示例代码:https://matplotlib.org/examples/pylab_examples/shared_axis_demo.html - Trevor Boyd Smith
1
真的!我希望在我提出问题时那个页面存在。现在有了,太好了。 - BobC
4个回答

152

最简单的方法是在创建轴时使用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(...)

71

如果这符合你的风格,你也可以使用plt.subplots来实现同样的效果。

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

-1
我在绘制完图形后调用以下函数将它们链接在一起。该函数将获取当前图形中的所有子图,并链接它们的x轴。
import matplotlib.pyplot as plt
def linkx():
  # Get current figure
  axes = plt.gcf().axes 
  parent = axes[0]
  # Loop over other axes and link to first axes
  for i in range(1,len(axes)): 
    axes[i].sharex(parent)

-2

交互式地,这适用于不同的轴。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接