如何在 python seaborn heatmap 旁边有一个显示行值总和的栏?
Posted
技术标签:
【中文标题】如何在 python seaborn heatmap 旁边有一个显示行值总和的栏?【英文标题】:How can I have a bar next to python seaborn heatmap which shows the summation of row values? 【发布时间】:2016-01-27 12:43:59 【问题描述】:我能够生成一个热图,其数量叠加在图形上,作为数据透视表的视觉效果。我想在热图旁边有一列显示行的总和,我想在热图下有一列显示列的总和。
有没有办法将其合并到热图中? pv
是我用来生成热图图形的数据透视表。我想在图表的右侧有一列,其中包含每一行的总和值。同样,我想在图表底部有一行,其中包含每列的总和值。
fig = plt.figure(figsize = (20,10))
mask = np.zeros_like(pv)
mask[np.tril_indices_from(mask)] = True
#with sns.axes_style("white"):
ax = sns.heatmap(pv, annot=True, cmap="YlGnBu",mask=mask, linecolor='b', cbar = False)
ax.xaxis.tick_top()
plt.xticks(rotation=90)
【问题讨论】:
使用plt.subplots
创建一个有两个坐标轴的图形,将左侧坐标轴传递给heatmap
,在右侧绘制条形。
pandas 数据透视表函数有一个margins
参数,也许你想用那个?
【参考方案1】:
@Paul H subplot 建议确实对我有用。下面的代码让我得到了显示的数字。不确定这是否是最节省资源的方法,但它让我得到了我需要的东西。
fig = plt.figure(figsize=(20,15))
ax1 = plt.subplot2grid((20,20), (0,0), colspan=19, rowspan=19)
ax2 = plt.subplot2grid((20,20), (19,0), colspan=19, rowspan=1)
ax3 = plt.subplot2grid((20,20), (0,19), colspan=1, rowspan=19)
mask = np.zeros_like(pv)
mask[np.tril_indices_from(mask)] = True
sns.heatmap(pv, ax=ax1, annot=True, cmap="YlGnBu",mask=mask, linecolor='b', cbar = False)
ax1.xaxis.tick_top()
ax1.set_xticklabels(pv.columns,rotation=40)
sns.heatmap((pd.DataFrame(pv.sum(axis=0))).transpose(), ax=ax2, annot=True, cmap="YlGnBu", cbar=False, xticklabels=False, yticklabels=False)
sns.heatmap(pd.DataFrame(pv.sum(axis=1)), ax=ax3, annot=True, cmap="YlGnBu", cbar=False, xticklabels=False, yticklabels=False)
【讨论】:
您好 JL1515,我尝试在不同的数据集上使用您的解决方案。不知何故,两个总和子图上的注释没有显示。知道为什么会发生这种情况吗? 您是否放置了 annot=True ?以上是关于如何在 python seaborn heatmap 旁边有一个显示行值总和的栏?的主要内容,如果未能解决你的问题,请参考以下文章
如何在PowerPoint中使用Python Seaborn Visualizations?
如何在 Python 3.6.0 中平滑我的 seaborn 热图?
如何在 Python 中 Seaborn 的 countplot 中的每个条形上方添加值? [复制]