如何在Python的Seaborn pairplot对角直方图上显示中位数和分位数
给Seaborn角落图的对角直方图添加中位数和分位数线条
你可以通过计算数据分位数,再遍历pairplot的对角轴手动绘制垂直线条来实现需求,具体步骤和代码如下:
完整实现代码
import seaborn as sns import pandas as pd import numpy as np # 替换为你的真实数据 samples_new = np.random.multivariate_normal([1, 2, 3], [[1, 0.5, 0.2], [0.5, 1, 0.3], [0.2, 0.3, 1]], 1000) df = pd.DataFrame(samples_new, columns=['r1', 'r2', 'r3']) # 绘制基础角落图 cornerplot = sns.pairplot( df, corner=True, kind='kde', diag_kind="hist", diag_kws={'color':'darkslateblue', 'alpha':1, 'bins':10}, plot_kws={'color':'darkslateblue', 's':10, 'alpha':0.8, 'fill':False} ) # 计算25%、中位数、75%分位数 quantiles = df.quantile([0.25, 0.5, 0.75]) # 遍历对角轴添加分位数线条 for idx, col in enumerate(df.columns): ax = cornerplot.axes[idx, idx] # 中位数:红色虚线 ax.axvline(quantiles[col][0.5], color='crimson', linestyle='--', linewidth=2) # 25%和75%分位数:灰色实线 ax.axvline(quantiles[col][0.25], color='gray', linestyle='-', linewidth=1.5) ax.axvline(quantiles[col][0.75], color='gray', linestyle='-', linewidth=1.5) # 仅在第一个子图添加图例避免重复 if idx == 0: ax.legend(['Median', '25%/75% Quantile'], loc='upper right')
关键步骤说明
- 用
df.quantile()计算目标分位数,这里选择了常用的25%、中位数(50%)、75%分位数,可根据需求调整分位数数值 - 通过
cornerplot.axes[idx, idx]获取每个对角位置的直方图坐标轴 - 使用
axvline()绘制垂直参考线,通过color和linestyle参数区分不同分位数的线条 - 可选添加图例,提升图表可读性
内容的提问来源于stack exchange,提问作者lucas
相关产品推荐
相关产品推荐

