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

如何使用Seaborn绘制预分箱数据的累积直方图

没问题,我来帮你搞定预分箱数据的累积直方图绘制,让它和你用Seaborn画的其他直方图风格完全统一。

核心思路是:Seaborn的histplot默认处理原始数据,但预分箱数据已经有了分箱边界和累积计数,我们只需要把每个分箱的实际频数计算出来,再通过weights参数告诉Seaborn每个分箱的权重,就能生成和原始数据风格一致的累积直方图了。

具体步骤和代码示例

1. 先处理预分箱数据,计算每个分箱的实际频数

你的数据里TotalCount是累积计数,所以每个分箱的实际计数是当前行的TotalCount减去上一行的TotalCount,第一行直接用它本身的TotalCount即可。

2. 用Seaborn绘制匹配风格的累积直方图

这里我们指定预分箱的边界、权重,开启累积模式,同时调整样式和其他直方图对齐。

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

# 加载你的预分箱数据(这里用你给的示例数据演示)
df = pd.DataFrame({
    'Value': [939.0, 1380.0, 1454.0, 1492.0, 1521.0, 1550.0],
    'Percentile': [0.0, 0.1, 0.2, 0.3, 0.4, 0.5],
    'TotalCount': [1, 7504, 14929, 22598, 29865, 37409]
})

# 计算每个分箱的实际计数
df['bin_counts'] = df['TotalCount'].diff().fillna(df['TotalCount'].iloc[0])

# 设置和你其他直方图一致的Seaborn风格(比如whitegrid、darkgrid等)
sns.set_style("whitegrid")

# 绘制累积直方图
plt.figure(figsize=(10, 6))
sns.histplot(
    data=df,
    x='Value',
    weights='bin_counts',  # 用每个分箱的实际计数作为权重
    bins=df['Value'].values,  # 严格使用预分箱的边界,避免Seaborn自动重分箱
    cumulative=True,  # 开启累积模式
    stat='count',  # 统计量选count(和原始数据直方图一致,也可改成percent/probability)
    kde=False,  # 不需要核密度估计(如果你的其他图有kde可以开启)
    color='#1f77b4',  # 替换成你其他直方图用的颜色
    edgecolor='black'  # 分箱边框,和其他图保持一致
)

# 添加和其他图一致的标签、标题
plt.xlabel('Value')
plt.ylabel('Cumulative Count')
plt.title('Cumulative Histogram (Pre-binned Data)')

plt.show()

关键细节说明

  • 如果你的其他直方图用的是stat='percent'(y轴是累积百分比),只需要把上面的stat='count'改成stat='percent'即可,这样y轴会和你数据里的Percentile列对应上。
  • bins=df['Value'].values确保Seaborn完全使用你提供的预分箱边界,不会自动重新分箱,保证和原始数据的直方图分箱逻辑一致。
  • 颜色、风格、标签这些参数完全可以根据你现有直方图的配置调整,确保视觉上统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:59:13