如何用Python实现支持CLI参数输入的二项分布PDF与CDF绘图
绘制可自定义参数的二项分布PDF/CDF(Python CLI实现)
核心实现思路
使用scipy.stats.binom生成二项分布的概率质量函数(PDF/PMF)和累积分布函数(CDF),通过argparse实现命令行参数输入,最后用matplotlib绘制双图对比展示。
完整代码
import argparse import numpy as np import scipy.stats as stats import matplotlib.pyplot as plt def main(): # 解析命令行参数 parser = argparse.ArgumentParser(description='绘制二项分布的PDF(概率质量函数)和CDF(累积分布函数)') parser.add_argument('-n', '--trials', type=int, required=True, help='试验总次数,必须为正整数') parser.add_argument('-p', '--probability', type=float, required=True, help='单次试验成功概率,取值范围0~1') parser.add_argument('-o', '--output', type=str, help='可选:图形保存路径(如./binom_plot.png),不指定则直接显示图形') args = parser.parse_args() # 参数合法性校验 if args.trials <= 0: raise ValueError("试验次数必须是正整数") if not (0 <= args.probability <= 1): raise ValueError("成功概率必须在0到1之间") # 生成成功次数的取值范围(0到n) x = np.arange(0, args.trials + 1) # 计算PDF和CDF binom_pmf = stats.binom.pmf(x, n=args.trials, p=args.probability) binom_cdf = stats.binom.cdf(x, n=args.trials, p=args.probability) # 设置绘图布局 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5)) # 绘制PDF(离散分布用柱状图) ax1.bar(x, binom_pmf, color='#1f77b4', alpha=0.7) ax1.set_title(f'二项分布PDF (n={args.trials}, p={args.probability})') ax1.set_xlabel('成功次数') ax1.set_ylabel('概率') ax1.grid(axis='y', linestyle='--', alpha=0.7) # 绘制CDF(阶梯图) ax2.step(x, binom_cdf, color='#ff7f0e', where='post', linewidth=2) ax2.set_title(f'二项分布CDF (n={args.trials}, p={args.probability})') ax2.set_xlabel('成功次数') ax2.set_ylabel('累积概率') ax2.grid(axis='y', linestyle='--', alpha=0.7) # 调整子图间距 plt.tight_layout() # 保存或显示图形 if args.output: plt.savefig(args.output, dpi=300, bbox_inches='tight') print(f"图形已保存至:{args.output}") else: plt.show() if __name__ == '__main__': main()
代码说明
- CLI参数解析:通过
argparse强制要求用户输入-n(试验次数)和-p(成功概率),同时支持可选的-o参数保存图形。 - 参数校验:确保输入的试验次数为正整数、成功概率在0~1范围内,避免无效计算。
- 分布计算:利用
scipy.stats.binom.pmf()和binom.cdf()直接生成对应分布值,无需手动实现公式。 - 绘图细节:PDF用柱状图展示离散概率,CDF用阶梯图体现累积特性,添加标题、坐标轴标签和网格提升可读性。
使用方法
- 确保已安装依赖库:
pip install numpy scipy matplotlib
- 运行脚本(示例):
# 直接显示图形(试验次数20,成功概率0.3) python binom_plot.py -n 20 -p 0.3 # 保存图形到指定路径 python binom_plot.py -n 10 -p 0.5 -o ./binom_distribution.png
内容的提问来源于stack exchange,提问作者Oladiano Meriko Onaiker
相关产品推荐
相关产品推荐

