1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| import pandas as pd from matplotlib import pyplot as plt import seaborn as sns from scipy import stats
df_corr = pd.read_csv('data.csv') cmap = plt.get_cmap('RdBu') new_colors = cmap(np.linspace(0, 1, 2000))
def draw_corr(x_var, y_var, **kwargs): coef, p_val = stats.pearsonr(x_var, y_var)[0], stats.pearsonr(x_var, y_var)[1] p_str = '***' if p_val < 0.001 else '**' if p_val < 0.01 else '*' if p_val < 0.05 else '' label = '{0:.3f}'.format(coef) + '\n' + p_str color = tuple(new_colors[int((round(coef, 3) + 1) * 1000)]) ax = plt.gca() ax.annotate(label, xy=(0.3, 0.3), size=24, xycoords=ax.transAxes) ax.patch.set_facecolor(color) ax.patch.set_alpha(0.7)
pg = sns.PairGrid(data=df_corr, height=2) pg.map_lower(sns.regplot, color='k', ci=95, scatter_kws={'s': 20, 'lw': 0.3, 'alpha': 0.6}, line_kws={'lw': 2, "color": 'firebrick'}) pg.map_diag(sns.histplot, bins=10, edgecolor='w', kde=True, line_kws={'lw': 2}) pg.map_upper(draw_corr) pg.tight_layout()
PairGrid_axes = pg.axes for axes in PairGrid_axes.flatten(): axes.tick_params(axis='both', labelsize=16) axes.ticklabel_format(style='sci', scilimits=(-1, 2), axis='both') axes.xaxis.label.set_fontsize(20) axes.yaxis.label.set_fontsize(20) plt.show()
|