根据pearsonr值更改每个PairGrid Seaborn图中的字体颜色:

时间:2017-04-27 21:56:36

标签: python matplotlib seaborn

我正在使用seaborn进行策划,我正在使用seaborn.PairGrid函数(下面的代码)。

我可以计算pearsonr值并设置我的颜色列表。

有没有办法根据pearsonr相关值来改变每个配对颜色?

global my_colors
my_colors = []

def corrfunc(x, y, **kws):
    r = stats.pearsonr(x, y)[0] ** 2
    ax = plt.gca()
    ax.annotate("r$^2$ = {:.2f}".format(r),
                 xy=(.1, .9), xycoords=ax.transAxes)
    if r > 0.6:
       my_colors.append('g')
    elif r < 0.6:
       my_colors.append('r')
    return r

df = pd.read_excel(Inp_Filename, sheetname='IC_Data')

IC_Plot = sns.PairGrid(df)
IC_Plot.map_offdiag(corrfunc)

IC_Plot.map_offdiag(sns.regplot, color='g') 
#Need to change color of each 
#pairplot based on the pearsonr value

IC_Plot.map_offdiag(plt.scatter, s=10)

IC_Plot.savefig("IC_Pair.png")

1 个答案:

答案 0 :(得分:2)

您可以在确定颜色的函数中调用绘图方法。通过这种方式,颜色可以简单地作为绘图函数的参数给出。

import seaborn.apionly as sns
import matplotlib.pyplot as plt
from scipy.stats import pearsonr

df = sns.load_dataset("iris")

def corrfunc(x, y, **kws):
    r = pearsonr(x, y)[0] ** 2
    ax = plt.gca()
    ax.annotate("r$^2$ = {:.2f}".format(r),
                 xy=(.1, .9), xycoords=ax.transAxes)
    if r > 0.6:
       col = "g"
    elif r < 0.6:
       col= 'r'

    sns.regplot(x,y,color=col)  
    return r


IC_Plot = sns.PairGrid(df)
IC_Plot.map_offdiag(corrfunc)

plt.show()

enter image description here