2015-04-12 130 views
5

我正嘗試使用分別代表每個標籤的數據點要素相關性的熱圖創建單個圖像。隨着seaborn我可以創建一個熱圖像這麼使用Seaborn FacetGrid繪製相關熱點地圖

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

+0

你想要九個熱點圖,每個顯示一個目標內的相關性? – cphlewis

+0

是的,我接受了@cphlewis的回答,因爲它可行,但是我目前喜歡seaborn的是,你可以快速和骯髒地繪製東西,因爲你幾乎可以告訴它「繪製這個」並且它會提出一些東西。我的用例非常多:對於我來說,如何安排熱點圖或顯示哪些軸不是很重要,只是以我所要求的格式查看信息。所以得到的lambda的東西工作將是非常有用的:) – fakedrake

+0

是的,我衝了它,並沒有點擊按鈕妥善thanx :) – fakedrake

回答

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參數:

VMINVMAX:花車,可選

價值錨定顏色表,否則他們是從數據和其他關鍵字參數推斷。當推斷出發散數據集爲 時,其中一個值可能會被忽略。

4

沒有FacetGrid,但製作科爾熱圖的每一組中的列:

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