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

如何为seaborn中的displot图表添加误差棒

实现方法

sns.displot没有内置误差棒绘制接口,你可以通过提取直方图的分箱、计数数据后手动叠加误差棒实现需求,具体操作如下:

  • 绘制基础直方图时指定stat="count",保留每个分箱内的原始样本计数,不要做归一化转换
  • 从绘制完成的直方图轴对象中,提取每个矩形分块的位置、高度(即对应分箱的样本数)
  • 按要求计算每个分箱的误差值:对应分箱样本计数的平方根
  • 调用matplotlib的误差棒接口,在每个分箱的中心位置绘制误差棒

完整可运行代码

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 生成目标指数分布数据
x = np.random.exponential(2.2 * 10**(-6), 10000)

# 绘制基础计数直方图
g = sns.displot(x, stat="count")
ax = g.axes[0, 0]

# 遍历直方图矩形块,提取分箱中心、对应样本计数
bin_centers = []
bin_counts = []
for patch in ax.patches:
    bin_centers.append(patch.get_x() + patch.get_width() / 2)
    bin_counts.append(patch.get_height())

bin_centers = np.array(bin_centers)
bin_counts = np.array(bin_counts)
# 计算误差:每个分箱计数的平方根
count_err = np.sqrt(bin_counts)

# 叠加误差棒,fmt='none'表示不额外绘制数据点,仅显示误差棒
ax.errorbar(
    x=bin_centers,
    y=bin_counts,
    yerr=count_err,
    fmt="none",
    c="black",
    capsize=3
)

plt.show()

可选调整说明

  • 若需要自定义分箱数量或边界,直接在sns.displot中传入bins参数即可,后续提取分箱数据的逻辑无需修改
  • 误差棒样式可通过ax.errorbar的参数调整:capsize控制误差棒两端横杠的长度,c设置颜色,elinewidth调整误差棒线宽
  • 若你修改了stat参数使用密度、概率等其他纵轴统计量,需要同步调整误差的计算逻辑,保证误差尺度和纵轴展示的统计量匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.11 16:16:24