Python 子地块之间的Matplotlib距离

Python 子地块之间的Matplotlib距离,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我有3x3matplotlib轴,包含sns.heatmap。在主热图的左侧和上方放置两个附加热图(例如10x1和1x25) 主热图和其他两个热图之间的距离取决于主热图内容的形状[0]和形状[1]比例 我还没有找到保持恒定的方法,所以如果我尝试绘制一个在维度上有较大不均衡(比如50 x 10)的数组,其中一个距离会高得离谱:( 此图显示了由以下代码产生的不相等的x和y距离,这说明了问题 import numpy as np import matplotlib from matplotlib im

我有3x3
matplotlib
轴,包含
sns.heatmap
。在主热图的左侧和上方放置两个附加热图(例如10x1和1x25)

主热图和其他两个热图之间的距离取决于主热图内容的形状[0]和形状[1]比例

我还没有找到保持恒定的方法,所以如果我尝试绘制一个在维度上有较大不均衡(比如50 x 10)的数组,其中一个距离会高得离谱:(

此图显示了由以下代码产生的不相等的x和y距离,这说明了问题

import numpy as np
import matplotlib
from matplotlib import pyplot as plt
import seaborn as sns

YZ = np.random.normal(loc=0.0, scale=1.0, size=(10,25))
XB = np.random.normal(loc=0.0, scale=1.0, size=(25,1))
XA = np.random.normal(loc=0.0, scale=1.0, size=(10,1))

fig, ax = plt.subplots(
    3,3,
    figsize=( YZ.shape[1], YZ.shape[0], ),
    gridspec_kw={
        "width_ratios"  : [ 1, YZ.shape[1], 0.5 ],
        "height_ratios" : [ 1, YZ.shape[0], 0.5 ],
    }
)

with sns.axes_style("darkgrid"):
    hm = {}; hm[0],hm[1],hm[2] = {},{},{}
    hm[1][1] = sns.heatmap(
        data       = YZ,
        ax         = ax[1][1],
        square     = True,
        annot_kws  = {"size": 8},
        linewidths = 0,
        cbar       = True,
        cbar_ax    = ax[1][2],
    )
    hm[1][0] = sns.heatmap(
        data       = XA,
        ax         = ax[1][0],
        square     = True,
        annot_kws  = {"size": 8},
        linewidths = 2,
        linecolor  = "white",
        cbar       = False,
    )
    hm[0][1] = sns.heatmap(
        data       = XB.T,
        ax         = ax[0][1],
        square     = True,
        annot_kws  = {"size": 8},
        linewidths = 2,
        linecolor  = "white",
        cbar       = False,
    )
ax[1][1].get_shared_x_axes().join( ax[1][1], ax[0][1] )
ax[1][1].get_shared_y_axes().join( ax[1][1], ax[1][0] )
plt.tight_layout()
plt.show()
有没有一种简单的方法可以使两个盘的轴之间的距离保持恒定(比如10%的图像宽度或200px)


我不知道如何使
ax[1][1]
ax[1][0]
之间的距离与
ax[1][1]
ax[0][1]之间的距离相同

问题在于,当子地块的宽高比发生变化时,图形的宽高比却没有变化。现在matplotlib总是尽可能地填充可用空间,这就是为什么子地块之间的距离会不同。您可以使用AxesDivider,而不是gridspec用右边的
pad
表示,轴之间的距离应该保持不变。正如@ThomasKühn所说,matplotlib分配子地块插槽时不考虑子地块中轴的纵横比。但是各种
imshow
方法设置纵横比,matplotlib只是使其适合较大的子地块槽,与混乱的差距的结果。我认为规范教程是