利用Python的Matplotlib库绘制CDF(累积分布函数)图像

本文介绍了如何使用Python的Matplotlib库来绘制累积分布函数(CDF)图像。通过读取CSV文件中的原始数据,分别绘制不同数据集的CDF曲线,展示了Matplotlib在数据可视化方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实习的时候碰到了很多CDF(累积分布函数)图像,想自己绘制一下CDF但发现Excel好像没有绘制曲线图的功能,所以正好学习一下Python图标绘制库Matplotlib的使用。

有关CDF的定义可以参考维基百科词条【Cumulative Distribution Function

原始数据

把需要计算的原始数据用逗号分隔开,保存为csv文件,每一行代表一条CDF曲线。比如有丈量的瓷砖的长和宽数据,将长和宽各绘制成一条CDF曲线在一张图里,CSV文件应该保存成:

5.00,6.55,3.22...//长
2.00,3.11,1.33...//宽

代码如下

import numpy as np
import matplotlib.pyplot as plt

filename = 
<think>好的,我现在需要帮助用户用Pythonmatplotlib或seaborn绘制标准正态分布累积分布函数CDF图像。首先,我得回忆一下CDF的定义和标准正态分布的相关知识。标准正态分布CDF是概率密度函数(PDF)的积分,从负无穷到某个特定值x的积分,表示随机变量小于等于x的概率。 接下来,我应该考虑用户的需求。他们可能希望生成一个清晰的图像,可能需要示例代码。用户提到了matplotlib和seaborn,所以我需要结合这两个的功能。另外,用户提供的引用中提到了Seaborn的displot函数,但那是用于绘制分布和KDE的,可能不适合直接绘制CDF。不过另一个引用提到了使用stats.norm.pdf和ppf函数,这提示我需要使用scipy.stats中的norm模块来获取CDF的值。 首先,我需要导入必要的:numpy用于生成数据点,matplotlib.pyplot用于绘图,scipy.stats中的norm用于计算CDF。然后,生成一个x轴的数据范围,比如从-4到4,间隔0.1,这样可以覆盖标准正态分布的大部分区域。接着,使用norm.cdf函数计算每个x对应的CDF值。 然后,使用matplotlib的plot函数绘制曲线,设置标题、坐标轴标签,可能还需要网格线让图像更清晰。同时,可能需要调整坐标轴范围,比如x从-4到4,y从0到1,确保图像完整显示。用户提供的引用中有类似的绘图代码,比如引用[2]中使用了plt.plot和参数设置,可以借鉴。 另外,用户提到可能需要使用seaborn。虽然seaborn的displot主要用来绘制分布图,但也可以结合使用,比如设置kde=False, cumulative=True来显示累积分布。不过对于标准正态分布,直接使用scipy.stats.norm.cdf更直接。或者,可以生成随机样本,然后用seaborn的ecdfplot,但这样可能不如理论曲线精确。 检查用户提供的引用,引用[1]提到了Seaborn的displot,但引用[2]和[5]则用了matplotlib和scipy.stats。所以可能用户更倾向于直接使用理论计算而非数据拟合。因此,使用scipy.stats.norm.cdf生成数据点,再用matplotlib绘图会更准确。 最后,代码需要正确导入,生成数据,绘制并调整图像。可能需要添加注释,让代码更易理解。此外,引用相关的参考资料,比如引用[3]中提到了norm.ppf和cdf的使用,引用[5]提到可视化正态分布的方法,这些都可以作为代码正确性的支持。 总结步骤: 1. 导入必要的:numpy, matplotlib.pyplot, scipy.stats.norm 2. 生成x轴数据 3. 计算CDF值 4. 使用matplotlib绘制曲线 5. 添加标题、标签、网格等 6. 展示图像 可能的错误点:忘记导入,或者参数设置错误,比如x的范围不够大,导致图像不完整。需要确保x覆盖足够的区域,比如-4到4,因为标准正态分布在±3σ内已经覆盖了99.7%的数据,但为了图像美观,可以适当扩展到±4。 另外,用户可能需要示例代码的输出效果,所以需要确保代码能够直接运行,并且图像清晰。可能需要调整线条颜色、粗细,或者添加图例,但用户没有特别要求,所以保持简洁即可。</think>要使用Python绘制标准正态分布累积分布函数CDF)曲线,可以结合`scipy.stats`、`matplotlib`和`numpy`实现。以下是分步说明及示例代码: --- ### **步骤说明** 1. **导入**:需使用`scipy.stats.norm`计算CDF值,`matplotlib.pyplot`绘图,`numpy`生成数据点 2. **生成x轴数据**:定义覆盖标准正态分布主要范围的数据点(如$-4$到$4$) 3. **计算CDF值**:通过`norm.cdf(x)`获取每个$x$对应的累积概率 4. **绘制曲线**:用`plt.plot()`绘制CDF曲线并添加标注 --- ### **示例代码** ```python import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm # 生成x轴数据点(范围-4到4,间隔0.1) x = np.arange(-4, 4.1, 0.1) # 计算标准正态分布CDFcdf_values = norm.cdf(x) # 绘制CDF曲线 plt.plot(x, cdf_values, color='blue', linewidth=2, label='Standard Normal CDF') plt.title("标准正态分布累积分布函数CDF)") plt.xlabel("x") plt.ylabel("累积概率 P(X ≤ x)") plt.grid(True, linestyle='--', alpha=0.6) plt.xlim(-4, 4) plt.ylim(0, 1) plt.legend() plt.show() ``` --- ### **代码说明** - **可视化效果**:曲线从$0$逐渐上升至$1$,呈现S型,符合正态分布CDF的典型特征[^5] - **关键参数**:`norm.cdf(x)`直接调用标准正态分布的累积概率计算函数,其默认参数为$\mu=0$和$\sigma=1$[^3] - **扩展应用**:若需自定义均值和标准差,可修改为`norm.cdf(x, loc=μ, scale=σ)` --- ### **其他方法(Seaborn结合数据抽样)** 若需通过数据样本绘制经验CDF,可使用`seaborn.ecdfplot`: ```python import seaborn as sns data = np.random.randn(1000) # 生成标准正态分布样本 sns.ecdfplot(data) plt.title("经验CDF(基于随机样本)") plt.show() ``` 此方法通过实际数据点展示累积概率,适用于非理论分析场景[^1][^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值