离散变量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
相关产品推荐
相关产品推荐

