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

如何用条形图可视化离散分布PMF?修正二项分布绘图错误

解决方法

你的代码存在两个关键问题:

  1. plt.hist用法错误:hist是用来统计输入数据的频率分布,不需要传入y参数,它会自动计算数据的频数/频率,而非直接绘制给定的概率值。
  2. 循环+多次plt.show():每次循环仅处理一个x值,且立刻显示图形,导致生成11个独立窗口,每个窗口仅含一个柱子。

要生成目标样式的二项分布概率图形,正确做法是一次性计算所有x对应的概率,再用plt.bar绘制(离散分布用条形图更贴合需求),代码如下:

import matplotlib.pyplot as plt
from scipy.stats import binom

# 生成所有x取值(0到10)
x_values = range(11)
# 计算每个x对应的二项分布概率质量函数值
pmf_values = binom.pmf(x_values, n=10, p=0.5)

# 绘制条形图
plt.bar(x_values, pmf_values, width=0.8, color='skyblue', edgecolor='black')

# 添加图形标注
plt.title('二项分布概率质量函数 (n=10, p=0.5)')
plt.xlabel('x')
plt.ylabel('概率 P(X=x)')
plt.xticks(x_values)  # 确保x轴显示所有整数刻度
plt.grid(axis='y', linestyle='--', alpha=0.7)

plt.show()

若你更倾向于基于样本数据的直方图样式,可先生成大量符合该二项分布的样本,再绘制直方图并叠加理论概率曲线:

import matplotlib.pyplot as plt
from scipy.stats import binom
import numpy as np

# 生成10000个符合二项分布的样本
samples = binom.rvs(n=10, p=0.5, size=10000)

# 绘制直方图(密度归一化,与PMF匹配)
plt.hist(samples, bins=np.arange(0, 12)-0.5, density=True, alpha=0.6, color='skyblue', edgecolor='black')

# 绘制理论PMF曲线
x_values = range(11)
pmf_values = binom.pmf(x_values, n=10, p=0.5)
plt.plot(x_values, pmf_values, 'ro-', label='PMF')

plt.title('二项分布样本直方图与PMF')
plt.xlabel('x')
plt.ylabel('密度/概率')
plt.xticks(x_values)
plt.legend()
plt.grid(axis='y', linestyle='--', alpha=0.7)

plt.show()

这两种方式都能生成你需要的目标图形,第一种直接绘制理论概率的条形图,第二种基于样本数据生成直方图并叠加理论曲线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:30:05