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

离散变量CDF绘制:阶梯图样式自定义(从y=0左侧延伸)

解决离散变量CDF阶梯图从y=0左侧起始的问题

嘿,我来帮你调整这个CDF图的起始样式!你现在用plt.step(data, y)画的阶梯图,默认是从第一个数据点对应的y值开始的,但标准的离散CDF确实应该从y=0、且在所有数据点的左侧就启动,对吧?

核心思路

要实现这个效果,我们只需要对x和y数组做一点扩展:

  • 给x轴数据加一个位于所有数据左侧的起始点
  • 给y轴数据加一个初始值0,让阶梯图从这个点开始逐步上升

具体代码实现

首先要确保你的数据是排序好的(CDF必须基于有序数据,不然图形会混乱),然后按照下面的步骤修改代码:

import numpy as np
import matplotlib.pyplot as plt

# 假设你的data已经从csv导入,先排序(如果还没排序的话)
data = np.sort(data)

# 计算原y值
y = np.arange(1, len(data)+1)/len(data)

# 生成扩展的x和y数组
# 选一个比最小数据小的起始x:如果数据有多个点,用最小点减去相邻点间距的一半;如果只有一个点,直接减1
start_x = data.min() - (data[1] - data[0])/2 if len(data) > 1 else data.min() - 1
extended_x = np.concatenate([[start_x], data])
extended_y = np.concatenate([[0], y])

# 绘制阶梯图,where='pre'表示在每个x点前保持当前y值,到x点时上升(符合CDF的定义)
plt.step(extended_x, extended_y, where='pre')

# 可选:添加图表标签和标题
plt.xlabel('数据变量')
plt.ylabel('累积分布函数(CDF)')
plt.title('离散变量CDF图')

plt.show(block=False)

效果说明

扩展后的数组会让plt.step()从(start_x, 0)开始画一条水平线,直到第一个数据点,然后上升到第一个y值,完全满足你“从y=0线左侧起始并向右侧延伸”的需求。

如果你的数据间距不均匀,也可以直接给start_x设一个固定的小偏移量(比如data.min() - 0.1),只要确保它在所有数据的左侧就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:51:55