我正在尝试使用以下布局来制作 Gridspec: 布局看起来应该如此
左下方的图应该是等宽比的。遗憾的是,我不得不调整窗口大小才能得到这张图片。对于其他尺寸,顶部或右侧的图与左下方的图不对齐。
我的代码如下:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure(figsize=(8,8))
gs = gridspec.GridSpec(3, 3, width_ratios=[1, 1/4, 1/32], height_ratios=[1/32, 1/4, 1])
ax = plt.subplot(gs[2, 0])
ax.set_aspect('equal')
ax_histx = plt.subplot(gs[1, 0], sharex=ax)
ax_histy = plt.subplot(gs[2, 1], sharey=ax)
cax = plt.subplot(gs[2, 2])
cax2 = plt.subplot(gs[0, 0])
plt.show()
如果我不设置纵横比,子图会完美对齐。但似乎我无法同时实现对齐和相等的纵横比。
另外,左下角的图形并不总是正方形。例如,如果我为 x 和 y 设置不同的限制
ax.set_xlim(0,10)
ax.set_ylim(0,5)
它应该是一个宽度=2*高度的矩形,以便图中的所有单元格都是正方形。
您可以考虑使用inset_axes方法来布置轴,而不是
GridSpec
。这里我为每个插入轴设置了硬编码的位置,但您可能希望使它们成为主轴限制的函数。设置轴尺寸会调整轴的尺寸,但不会调整图形的尺寸。除了用数学方法适当设置图形尺寸外,我找不到其他方法。
幸好,对于你的情况来说,这很容易,因为任何正方形图形大小都可以完成这项工作。实际上,图形大小并不重要,重要的是图形中包含所有子图的矩形的范围。
问题在于,当图形大小为正方形时,图形范围和子图范围之间的默认边距会使子图范围不为正方形。(这在默认的 rcParams
figure.subplot.left/right/bottom/top
中设置为正方形)。0.125/0.9/0.11/0.88
总而言之,放置一个平方图形大小,并修复
left
//right
/参数bottom
,您就可以开始了:top
GridSpec