Python:如何并排绘制多个 seaborn 热图? [英] Python: How to plot multiple seaborn heatmaps side-by-side?

查看:180
本文介绍了Python:如何并排绘制多个 seaborn 热图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含 20 多个功能的 Pandas 数据框.我想看看它们的相关矩阵.我使用如下代码创建热图,使用 subset1subset2 等:

I have a Pandas dataframe with 20+ features. I would like to see their correlation matrices. I create the heatmaps with code like the below, with subset1, subset2, etc.:

import seaborn as sns
cmap = sns.diverging_palette( 220 , 10 , as_cmap = True )
sb1 = sns.heatmap(
    subset1.corr(), 
    cmap = cmap,
    square=True, 
    cbar_kws={ 'shrink' : .9 }, 
    annot = True, 
    annot_kws = { 'fontsize' : 12 })

我希望能够像这样并排显示由上述代码生成的多个热图:

I would like to be able to display multiple heatmaps generated by the above code, side-by-side like so:

display_side_by_side(sb1, sb2, sb3, ...)

我不确定如何执行此操作,因为上面的第一个代码块不仅将结果保存到 sb1,而且还绘制了热图.另外,不确定如何编写函数,display_side_by_side().我对 Pandas 数据框使用以下内容:

I'm not sure how to do this because the first code chunk above not only saves the results to sb1, but also plots the heatmap. Also, not sure how to write a function, display_side_by_side(). I am using the following for Pandas dataframes:

# create a helper function that takes pd.dataframes as input and outputs pretty, compact EDA results
from IPython.display import display_html
def display_side_by_side(*args):
    html_str = ''
    for df in args:
        html_str = html_str + df.to_html()
    display_html(html_str.replace('table','table style="display:inline"'),raw=True)

<小时>

根据 Simas Joneliunas 下面的第一个回答,我提出了以下可行的解决方案:


Based on the first answer below by Simas Joneliunas, I have come up with the following working solution:

import matplotlib.pyplot as plt
import seaborn as sns

# Here we create a figure instance, and two subplots
fig = plt.figure(figsize = (20,20)) # width x height
ax1 = fig.add_subplot(3, 3, 1) # row, column, position
ax2 = fig.add_subplot(3, 3, 2)
ax3 = fig.add_subplot(3, 3, 3)
ax4 = fig.add_subplot(3, 3, 4)
ax5 = fig.add_subplot(3, 3, 5)

# We use ax parameter to tell seaborn which subplot to use for this plot
sns.heatmap(data=subset1.corr(), ax=ax1, cmap = cmap, square=True, cbar_kws={'shrink': .3}, annot=True, annot_kws={'fontsize': 12})
sns.heatmap(data=subset2.corr(), ax=ax2, cmap = cmap, square=True, cbar_kws={'shrink': .3}, annot=True, annot_kws={'fontsize': 12})
sns.heatmap(data=subset3.corr(), ax=ax3, cmap = cmap, square=True, cbar_kws={'shrink': .3}, annot=True, annot_kws={'fontsize': 12})
sns.heatmap(data=subset4.corr(), ax=ax4, cmap = cmap, square=True, cbar_kws={'shrink': .3}, annot=True, annot_kws={'fontsize': 12})
sns.heatmap(data=subset5.corr(), ax=ax5, cmap = cmap, square=True, cbar_kws={'shrink': .3}, annot=True, annot_kws={'fontsize': 12})

推荐答案

你应该看看 matplotlib.add_subplot:

You should look at matplotlib.add_subplot:

# Here we create a figure instance, and two subplots
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)

# We use ax parameter to tell seaborn which subplot to use for this plot
sns.pointplot(x="x", y="y", data=data, ax=ax1)

这篇关于Python:如何并排绘制多个 seaborn 热图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆