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

使用ggplot2的stat_function绘制多泊松分布PDF柱状图的问题

排查与解决方案

常见问题分析

用stat_function绘制泊松分布PDF柱状图时,容易踩这些坑:

  • 忽略泊松的离散性:stat_function默认连续采样x值,导致概率计算偏离离散整数点,柱状图位置不对
  • 未设置合适的geom类型:默认是line,不会生成柱状图
  • 未处理多分布的显示方式:多个分布重叠或位置错乱,没有用position_dodge实现并列
  • x轴范围未覆盖分布的主要取值区间,导致部分概率被截断

修正后的代码(纯ggplot2,无tidyverse)

library(ggplot2)

# 定义要展示的泊松分布lambda参数
lambda_list <- c(2, 5, 10)
# 设置x的离散取值范围(覆盖分布的主要区间)
x_vals <- 0:20

ggplot() +
  # 循环添加每个泊松分布的柱状层(base R循环,无需tidyverse)
  lapply(lambda_list, function(lambda) {
    stat_function(
      fun = dpois,          # 泊松分布概率密度函数
      args = list(lambda = lambda),  # 传递当前lambda参数
      geom = "col",         # 指定绘制柱状图
      position = position_dodge(width = 0.8),  # 并列显示柱状
      n = length(x_vals),   # 确保只在指定的离散x点计算概率
      xlim = range(x_vals),
      aes(fill = factor(lambda))  # 用lambda值区分颜色
    )
  }) +
  scale_x_continuous(breaks = x_vals) +  # x轴显示所有整数点
  scale_fill_discrete(name = "λ值") +
  labs(title = "多泊松分布概率密度", x = "x", y = "P(X=x)") +
  theme_minimal()

关键修正点

  1. 强制离散计算:通过n = length(x_vals)让stat_function只在指定的整数x点计算概率,匹配泊松分布的离散特性(若你的ggplot2版本≥3.4.0,也可直接加discrete = TRUE参数)
  2. 指定柱状几何对象:geom = "col"确保生成柱状图而非默认的折线
  3. 并列布局:position_dodge让不同lambda的柱状图错开显示,避免重叠
  4. 明确x轴范围:提前定义x_vals确保覆盖分布的主要取值区间,避免截断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:47:06