将轴限制从一个子图(“相等”方面)复制到另一个子图

时间:2014-03-17 20:30:49

标签: matplotlib

在带有2x2子图的图中,我需要右边的两个子图来共享x轴,但是左边的子图不要共享它们的轴。另外,我需要确定x轴限制的子图具有“相等”的纵横比。我试过这个:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2, figsize=(12, 9))

# Subplot [0,1]    
ax[0,1].axis('equal') 
ax[0,1].plot(...)
[xmin01, xmax01, ymin01, ymax01] = self.ax[0,1].axis() 

# Subplot [1,1]
ax[1,1].plot(...)
ax[1,1].set_xlim(left=xmin01, right=xmax01)

这不起作用:axis()返回的x轴限制接近数据限制,并不是绘制的子图中显示的实际限制。在ax[0,1].axis('equal')命令后更改plot的位置无效。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

查看pyplot源代码,我发现axis('equal')正在调用方法set_aspect()。后一种方法是修改变量self._aspect,但它没有进一步更新任何相关的东西!然后,我查找并找到了真正更新宽高比的方法:它名为apply_aspect()。所以,它看起来并不优雅,但至少我的问题如图所示解决了:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2, figsize=(12, 9))

# Subplot [0,1]    
ax[0,1].axis('equal') 
ax[0,1].plot(...)
ax[0,1].apply_aspect()
[xmin01, xmax01, ymin01, ymax01] = self.ax[0,1].axis() 

# Subplot [1,1]
ax[1,1].plot(...)
ax[1,1].set_xlim(left=xmin01, right=xmax01)