【问题标题】:Make cells have the same size between seaborn heatmaps使单元格在 seaborn 热图之间具有相同的大小
【发布时间】:2021-01-24 14:41:48
【问题描述】:

我正在制作两个 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')

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

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

【问题讨论】:

标签: python matplotlib seaborn


【解决方案1】:

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

如果图 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')

我想知道是否还有一个可以切换以获取此行为的 seaborn 选项?

【讨论】:

  • 您可以使用axes[0].set_aspect(0.5)axes[1].set_aspect(0.5)(或一些类似的数字)来真正强制单元格大小相等。仍然需要 grid_spec 来获得近似大小(网格为标题和标签保留空间)。
猜你喜欢
  • 2021-01-18
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
相关资源
最近更新 更多