在带有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
的位置无效。有什么想法吗?
答案 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)