Seaborn Correlation Coefficient on PairGrid

后端 未结 1 928
执笔经年
执笔经年 2020-12-08 16:31

Is there a matplotlib or seaborn plot I could use with g.map_lower or g.map_upper to get the correlation coefficient displayed for each bivariate plot like shown below? plt.

相关标签:
1条回答
  • 2020-12-08 17:17

    You can pass any function to the map_* methods as long as it follows a few rules: 1) it should plot onto the "current" axes, 2) it should take two vectors as positional arguments, and 3) it should accept a color keyword argument (optionally using it, if you want to be compatible with the hue option).

    So in your case you just need to define a little corrfunc function and then map it across the axes you want to have annotated:

    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 讨论(0)
提交回复
热议问题