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

如何在Matplotlib中无需分箱绘制高精度CDF(累积分布函数)

无分箱绘制CDF的实现方案

你可以通过计算**经验累积分布函数(ECDF)**实现完全无分箱的CDF绘制,彻底避免分箱带来的精度损失,原理是:CDF在任意取值x处的结果等于样本中小于等于x的数值占总样本量的比例,直接对原始数据排序后计算对应累计比例即可,不需要任何分箱操作。


手动实现方案(无需额外依赖)

仅需要numpy和matplotlib即可完成,代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 你的原始数据
data = np.linspace(0, 100, num=10000)

# 排序数据
sorted_data = np.sort(data)
# 计算每个排序点对应的累计概率
cdf = np.arange(1, len(sorted_data) + 1) / len(sorted_data)

# 绘图
plt.plot(sorted_data, cdf)
plt.xlabel('数值')
plt.ylabel('累计概率')
plt.show()

该方案和分箱方案的对比如下:

  • 完全无精度损失,保留所有原始数据的分布特征
  • 计算效率更高,不需要执行分箱统计的逻辑
  • 绘制结果为连续折线,不会出现分箱导致的阶梯状误差

调用现成ECDF工具的方案

如果你不想手动实现排序逻辑,可以直接使用statsmodels库内置的ECDF实现:

  1. 首先安装依赖(若未安装):pip install statsmodels
  2. 示例代码:
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.distributions.empirical_distribution import ECDF

data = np.linspace(0, 100, num=10000)
# 直接生成ECDF对象
ecdf = ECDF(data)
# 绘图
plt.plot(ecdf.x, ecdf.y)
plt.xlabel('数值')
plt.ylabel('累计概率')
plt.show()

该方案的计算结果和手动实现完全一致,同时支持更多扩展的统计操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:06:04