Matplotlib子图之间的距离

时间:2019-02-10 07:16:28

标签: python matplotlib seaborn

我有3x3 matplotlib个轴,其中包含sns.heatmap。在主热图ax[1][1](即2D矩形,例如形状为10x25)的左侧和上方,放置了两个附加的热图(例如10x1和1x25)。

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

我还没有找到一种使它保持恒定的方法,因此,如果我尝试绘制一个尺寸更大(例如50 x 10)不均衡的数组,其中一个距离会变得非常高:(

https://ibb.co/rx9DRgp图片显示了以下代码产生的不相等的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]之间的距离...

0 个答案:

没有答案