绘制与Seaborn FacetGrid相关的热图

时间:2015-04-12 17:25:07

标签: python pandas plot seaborn

我正在尝试使用热图创建单个图像,分别表示每个标签的数据点特征的相关性。使用seaborn,我可以为单个类创建一个热图,如此

grouped = df.groupby('target')
sns.heatmap(grouped.get_group('Class_1').corr())

我知道这是有道理的:

Class_1 correlation heatmap

但后来我尝试列出所有标签,如下:

g = sns.FacetGrid(df, col='target')
g.map(lambda grp: sns.heatmap(grp.corr()))

可悲的是,我得到的这对我来说毫无意义:

Failing attempt to plot all classes

2 个答案:

答案 0 :(得分:5)

如果你使用map_dataframe代替map,你可以用seaborn非常简洁地做到这一点。

g = sns.FacetGrid(df, col='target')
g.map_dataframe(lambda data, color: sns.heatmap(data.corr(), linewidths=0))

@mwaskom在他的评论中指出,明确设置色图的限制可能是一个好主意,这样可以更直接地比较不同的方面。 documentation描述了相关的heatmap参数:

  

vmin vmax :浮动,可选

     

用于锚定色彩映射的值,否则它们是从数据和其他关键字参数推断出来的。当发散数据集时   推断,其中一个值可能会被忽略。

答案 1 :(得分:4)

没有FacetGrid,但为列中的每个组制作一个corr热图:

import pandas as pd
import seaborn as sns
from numpy.random import randint
import matplotlib.pyplot as plt


df = pd.DataFrame(randint(0,10,(200,12)),columns=list('abcdefghijkl'))
grouped = df.groupby('a')
rowlength = grouped.ngroups/2 # fix up if odd number of groups
fig, axs = plt.subplots(figsize=(9,4), nrows=2, ncols=rowlength)

targets = zip(grouped.groups.keys(), axs.flatten())
for i, (key, ax) in enumerate(targets):
    sns.heatmap(grouped.get_group(key).corr(), ax=ax,
                xticklabels=(i >= rowlength),
                yticklabels=(i%rowlength==0),
                cbar=False) # Use cbar_ax into single side axis
    ax.set_title('a=%d'%key)
plt.show()

enter image description here 也许有一种方法可以设置lambda,以便在转到g.facet_data()之前正确地将数据从corr生成器传递到heatmap