可视化部分相关

时间:2018-09-10 15:59:45

标签: python matplotlib

按照https://stats.stackexchange.com/questions/288273/partial-correlation-in-panda-dataframe-python的回答

dict = {'x1': [1, 2, 3, 4, 5], 'x2': [2, 2, 3, 4, 2], 'x3': [10, 9, 5, 4, 9], 'y' : [5.077, 32.330, 65.140, 47.270, 80.570]} 
df = pd.DataFrame(dict, columns=['x1', 'x2', 'x3', 'y'])
partial_corr_array = df.as_matrix()
np.round(partial_corr(partial_corr_array), decimals=2)

我想知道是否有一种获取视觉输出的方法,对我来说看起来像这样:

array([[ 1.  ,  0.52,  0.15,  0.91],
       [ 0.52,  1.  ,  0.25, -0.25],
       [ 0.15,  0.25,  1.  , -0.06],
       [ 0.91, -0.25, -0.06,  1.  ]])

df.corr().style.background_gradient()相同吗?即。带和注释的热图。

请注意,这是部分相关,即。我们正在控制其他变量的影响。

2 个答案:

答案 0 :(得分:0)

您的意思是否如下:

图1

import matplotlib.pyplot as plt
partial_corr_array = np.array([[ 1., 0.52, 0.15, 0.91], [ 0.52, 1., 0.25, -0.25], [ 0.15,  0.25,  1.  , -0.06], [ 0.91, -0.25, -0.06,  1.  ]])
plt.matshow(partial_corr_array)
plt.colorbar()

输出

enter image description here

图2 基于this链接。仅绘制矩阵的下半部分,因为它在对角线上对称。

import seaborn as sns
f, ax = plt.subplots(figsize=(6, 5))
partial_corr_array = np.array([[ 1., 0.52, 0.15, 0.91], [ 0.52, 1., 0.25, -0.25], [ 0.15,  0.25,  1.  , -0.06], [ 0.91, -0.25, -0.06,  1.  ]])
mask = np.zeros_like(partial_corr_array, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
cmap = sns.diverging_palette(30, 10, as_cmap=True)
sns.heatmap(partial_corr_array, mask=mask, cmap=cmap, vmax=1, center=0,
            square=True, linewidths=1, cbar_kws={"shrink": 0.9}, annot=True)

输出

enter image description here

答案 1 :(得分:0)

seaborn.heatmap正是提供了这一点,使用fmt控制面值字符串格式,并使用annot控制是否显示面值(默认为False):

此外,DataFrame.corr提供了一种方便的方法来计算各种类型的相关矩阵,并返回带有列名和行名的数据帧。默认情况下,Seaborn将使用这些标签作为轴技巧标签。

In [28]: import seaborn as sns
In [39]: sns.heatmap(df.corr(), fmt='0.2f', annot=True)
Out[39]: <matplotlib.axes._subplots.AxesSubplot at 0xd961048>

enter image description here