R语言中密度图与泊松分布预测图X轴起始值无法对齐问题
问题解决:密度图与泊松分布曲线对齐问题
核心问题原因
- x轴错位:调用
lines(dpois(0:22, ...))时未指定x坐标,R默认用1:length(y)(即1到23)作为x值,而密度图的x范围是0到22,两条曲线的x轴自然无法对齐。 - 显示问题:单独绘制dpois结果时,默认x范围是1到23,超出了你设置的
xlim=range(0:22)(即0到22),曲线被截断无法显示。 - 尺度匹配:密度图是连续核密度估计(PDF),泊松分布返回的是离散概率质量(PMF),前者是单位x区间的概率密度,后者是单个点的概率,直接对比需注意可视化方式的合理性。
修正后的代码
基础对齐版本
先解决x轴错位问题,同时用更适合离散分布的样式绘制泊松曲线:
dens <- density(data) plot(dens$x, dens$y, type="l", xlab="Value", ylab="Density / Probability", ylim=c(0, 0.2), xlim=c(0,22), col=4, lwd=2) # 显式指定x为0:22,让泊松点的x坐标和数据范围匹配 lines(x = 0:22, y = dpois(0:22, lambda=estimated_lambda), col=2, lwd=2, type="h") # 添加图例区分曲线 legend("topright", legend=c("数据核密度", "泊松PMF"), col=c(4,2), lwd=2)
更合理的对比方式
因为数据是离散整数,用直方图密度(而非核密度)和泊松PMF对比会更直观:
# 绘制数据的离散直方图(每个bin对应一个整数) hist(data, breaks = seq(-0.5, 22.5, 1), freq = FALSE, col = "lightblue", xlab="Value", ylab="Density / Probability", ylim=c(0,0.2), xlim=c(0,22)) # 添加核密度曲线作为补充 lines(density(data), col=4, lwd=2) # 绘制泊松分布的概率竖线 lines(x=0:22, y=dpois(0:22, lambda=estimated_lambda), col=2, lwd=2, type="h") legend("topright", legend=c("数据直方图密度", "数据核密度", "泊松PMF"), col=c("lightblue",4,2), lwd=c(1,2,2))
关键细节说明
type="h":绘制竖线而非折线,更符合离散分布PMF的表达形式,清晰展示每个整数点的概率值。breaks = seq(-0.5,22.5,1):让直方图的每个区间刚好覆盖一个整数(如-0.5~0.5对应0),此时freq=FALSE的直方图高度和该整数的概率密度一致,可直接与泊松PMF数值对比。- 显式指定
x参数:调用lines时不要依赖默认x序列,确保x轴范围和数据完全匹配。
内容的提问来源于stack exchange,提问作者Xascoria Dung
相关产品推荐
相关产品推荐

