2015-06-19 20 views
9

Có cốt truyện matplotlib hoặc seaborn tôi có thể sử dụng với g.map_lower hoặc g.map_upper để có được hệ số tương quan được hiển thị cho mỗi ô hai chiều như được hiển thị bên dưới không? plt.text được ánh xạ theo cách thủ công để lấy ví dụ dưới đây là một quá trình tẻ nhạt.Hệ số tương quan Seaborn trên PairGrid

enter image description here

Trả lời

18

Bạn có thể vượt qua bất kỳ chức năng để các map_* phương pháp miễn là nó sau một vài quy tắc: 1) nó nên vẽ lên các trục "hiện tại", 2) nó nên hai vectơ như các đối số vị trí, và 3) nó phải chấp nhận một đối số từ khóa color (tùy chọn sử dụng nó, nếu bạn muốn tương thích với tùy chọn hue).

Vì vậy, trong trường hợp của bạn, bạn chỉ cần xác định một chút corrfunc chức năng và sau đó bản đồ nó trên trục bạn muốn có chú thích:

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

đó đã làm việc một cách hoàn hảo cảm ơn bạn! – wblack

Các vấn đề liên quan