使细胞在海上热图之间具有相同的大小

时间:2020-10-09 13:45:33

标签: python matplotlib seaborn

我正在制作两个seaborn热图,将它们放入两个matplotlib子图中,如下所示:

fig, axes = plt.subplots(2, 1, sharex=True, figsize=(5,10))


data = [
    [0,0,0],
    [0,0,0],
    [0,0,0],
    [0,0,0],
    [0,0,0],
    [0,0,0],
    [0,0,0],
]
sns.heatmap(
        data, 
        ax=axes[0],
        linewidths=0.2,
        cbar=False)


data = [
    [0,0,0],
    [0,0,0],
    [0,0,0],
]
sns.heatmap(
        data, 
        ax=axes[1],
        linewidths=0.2,
        cbar=False)

axes[0].set_title("A")
axes[1].set_title('B')

enter image description here

如您所见,这将导致子图A和B。子图A中的单个像元都具有相同的大小。子图B中的像元大小也都相同。但是,A和B之间的像元大小不同。如何确保子图之间的单元格大小相同?

我理解这意味着情节A总体上会比情节B大,这不是问题。

1 个答案:

答案 0 :(得分:0)

可能的解决方案是更改两个子图的大小比例。

如果将图A和图B之间的大小比例设置为与图A和图B之间的行数之间的比例相同,则大小应(或多或少)相同。

data_a = [
    [0,0,0],
    [0,0,0],
    [0,0,0],
    [0,0,0],
    [0,0,0],
    [0,0,0],
    [0,0,0],
]
data_b = [
    [0,0,0],
    [0,0,0],
    [0,0,0],
]
fig, axes = plt.subplots(2, 1, 
        sharex=True, 
        figsize=(5,10), 
        gridspec_kw={'height_ratios': [len(data_a), len(data_b)]})


sns.heatmap(
        data_a, 
        ax=axes[0],
        linewidths=0.2,
        cbar=False)

sns.heatmap(
        data_b, 
        ax=axes[1],
        linewidths=0.2,
        cbar=False)

axes[0].set_title("A")
axes[1].set_title('B')

enter image description here

我想知道是否还可以通过选择来改变这种行为?