You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:00:58