2015-06-19 65 views
9

是否有我可以与g.map_lower或g.map_upper一起使用的matplotlib或seaborn图来获取每个双变量图如下所示的相关系数? plt.text被手动映射到下面的例子,这是一个乏味的过程。PairGrid上的Seaborn相关系数

enter image description here

回答

18

可以只要它遵循一些规则传递任何函数来map_*方法:1)它应绘制到“当前”轴,2)它应采取两个向量作为位置参数,和3)它应该接受color关键字参数(如果您想与hue选项兼容,可以选择使用它)。

所以你的情况,你只需要定义一个小corrfunc功能,然后在你希望有注释的轴映射它:

import numpy as np 
from scipy import stats 
import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt 
sns.set(style="white") 

mean = np.zeros(3) 
cov = np.random.uniform(.2, .4, (3, 3)) 
cov += cov.T 
cov[np.diag_indices(3)] = 1 
data = np.random.multivariate_normal(mean, cov, 100) 
df = pd.DataFrame(data, columns=["X", "Y", "Z"]) 

def corrfunc(x, y, **kws): 
    r, _ = stats.pearsonr(x, y) 
    ax = plt.gca() 
    ax.annotate("r = {:.2f}".format(r), 
       xy=(.1, .9), xycoords=ax.transAxes) 

g = sns.PairGrid(df, palette=["red"]) 
g.map_upper(plt.scatter, s=10) 
g.map_diag(sns.distplot, kde=False) 
g.map_lower(sns.kdeplot, cmap="Blues_d") 
g.map_lower(corrfunc) 

enter image description here

+0

,完美的工作谢谢! – wblack