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

如何为seaborn pointplot添加基于Lower/Upper列的自定义置信区间

问题描述

现有如下DataFrame:

df = pd.DataFrame({"X" : [1, 1, 2, 2, 3, 3, 4, 4], 
                   "Model" : ["A", "B", "A", "B", "A", "B", "A", "B"],
                   "Lower" : [0.2, 0.3, 0.2, 0.2, 0.25, 0.3, 0.3, 0.25],
                   "Median" : [0.5, 0.55, 0.6, 0.55, 0.5, 0.6, 0.5, 0.5],
                   "Upper" : [0.6, 0.7, 0.65, 0.7, 0.7, 0.65, 0.55, 0.7]})

已通过以下代码绘制seaborn点图:

pl1 = sns.catplot(data = df, kind = 'point', 
            hue = 'Model', 
            x = 'X', 
            y = 'Median', sharey = False, height = 3, aspect = 1.5)
pl1.set(ylim = (0, 1))

当前点图已绘制完成,现希望基于DataFrame中的Lower和Upper列,为点图添加半透明填充的置信区间,请问是否可行?

解决方案

完全可行,你可以结合Seaborn和Matplotlib的原生功能实现,具体步骤和代码如下:

实现步骤

  • 先绘制基础的Seaborn点图
  • 提取绘图的坐标轴对象,手动添加填充区间
  • 按Model分组,用fill_between函数绘制Lower到Upper之间的半透明区域,并匹配点图的颜色

完整代码

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 初始化数据
df = pd.DataFrame({"X" : [1, 1, 2, 2, 3, 3, 4, 4], 
                   "Model" : ["A", "B", "A", "B", "A", "B", "A", "B"],
                   "Lower" : [0.2, 0.3, 0.2, 0.2, 0.25, 0.3, 0.3, 0.25],
                   "Median" : [0.5, 0.55, 0.6, 0.55, 0.5, 0.6, 0.5, 0.5],
                   "Upper" : [0.6, 0.7, 0.65, 0.7, 0.7, 0.65, 0.55, 0.7]})

# 绘制点图
pl1 = sns.catplot(data=df, kind='point', 
                  hue='Model', 
                  x='X', 
                  y='Median', sharey=False, height=3, aspect=1.5)
pl1.set(ylim=(0, 1))

# 获取坐标轴对象
ax = pl1.axes[0, 0]

# 获取Seaborn默认调色板,保证填充色与点图颜色一致
palette = sns.color_palette()

# 为每个Model绘制置信区间填充
for idx, model in enumerate(df['Model'].unique()):
    model_data = df[df['Model'] == model]
    ax.fill_between(model_data['X'], 
                    model_data['Lower'], 
                    model_data['Upper'],
                    color=palette[idx], 
                    alpha=0.2)  # alpha控制透明度

plt.show()

关键说明

  • fill_between是Matplotlib的核心函数,专门用于绘制两条曲线之间的填充区域,这里用来可视化Lower和Upper构成的置信区间
  • 通过sns.color_palette()获取Seaborn当前使用的调色板,确保填充区域的颜色和对应Model的点、连线颜色完全匹配,保持视觉统一
  • alpha=0.2设置较低的透明度,避免填充区域遮挡点图的核心数据

内容的提问来源于stack exchange,提问作者thesecond

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:12:24