Image 如何链接imshow绘图的轴以进行缩放和平移?

Image 如何链接imshow绘图的轴以进行缩放和平移?,image,matplotlib,axes,Image,Matplotlib,Axes,假设我有一个带有3个绘图的图形画布。。。2是使用imshow绘制的相同尺寸的图像,另一个是其他类型的子图。我希望能够链接imshow绘图的x轴和y轴,这样当我放大一个(使用NavigationToolbar提供的缩放工具)时,另一个将缩放到相同的坐标,当我平移其中一个时,另一个也将平移 子图方法(如散点法和直方图法)可以通过指定sharex和sharey轴的KWARG传递,但imshow没有这样的配置 我开始通过子类化NavigationToolbar2WxAgg(如下所示)来解决这个问题。。。

假设我有一个带有3个绘图的图形画布。。。2是使用imshow绘制的相同尺寸的图像,另一个是其他类型的子图。我希望能够链接imshow绘图的x轴和y轴,这样当我放大一个(使用NavigationToolbar提供的缩放工具)时,另一个将缩放到相同的坐标,当我平移其中一个时,另一个也将平移

子图方法(如散点法和直方图法)可以通过指定sharex和sharey轴的KWARG传递,但imshow没有这样的配置

我开始通过子类化NavigationToolbar2WxAgg(如下所示)来解决这个问题。。。但这里有几个问题。 1) 这将链接画布中所有绘图的轴,因为我所做的只是取消对a.in_axes()的检查 2) 这对于平移效果很好,但缩放会导致所有子地块从同一全局点进行缩放,而不是从各自轴上的同一点进行缩放

有人能提出解决办法吗

非常感谢! -亚当


我没有意识到sharex可以被传递到添加子地块

f = plt.figure()
ax1 = f.add_subplot(211)
ax2 = f.add_subplot(212, sharex=ax1, sharey=ax1)
ax1.imshow(np.random.randn(10,10), interpolation='nearest')
ax2.imshow(np.random.randn(10,10), interpolation='nearest')
f.canvas.draw()
但是,如果尝试执行以下操作来设置用于显示图像的轴对象

ax1.axis('image')
您将获得:

ValueError: adjustable must be "datalim" for shared axes
matplotlib的人告诉我我可以用

ax1.set_adjustable("box-forced")
ax2.set_adjustable("box-forced")
相反,但它不适用于我使用matplotlib版本0.98.5.3。。。我想它会有一个更新的版本。当我听到回音时会更新

ax1.set_adjustable("box-forced")
ax2.set_adjustable("box-forced")