RStudio如何绘制多条件二项分布条形图?现有代码正确性咨询
现有代码的问题判断
- 目前的写法存在大量冗余,且无法实现多条件同图对比的绘图需求。
- 两段重复代码的计算逻辑没有实质差异:你定义的
xP50和xP5都是取值范围0-50的整数向量,调用dbinom()时传入的样本量50、发芽概率0.5参数完全一致,生成的prob1和prob2是完全相同的概率值,并非你预期的“不同条件下的概率结果”。 - 两次单独调用
barplot()会在绘图面板生成两张完全独立的分离图形,无法直观横向对比不同场景的概率差异,不符合你想要的多条件条形图的绘制目标。
正确的实现逻辑
题目要求的4类概率场景,本质是基于同一组二项分布基础概率值做不同区间的筛选/求和计算,完全不需要重复编写计算逻辑:
- 所有种子发芽的概率:对应发芽数=50位置的单点概率值
- 最多5粒种子发芽的概率:对应发芽数0到5的区间累积概率
- 至少4粒种子发芽的概率:对应发芽数4到50的区间累积概率
- 其余同类场景的概率:为上述三类场景覆盖后剩余区间的概率总和
参考实现代码
# 全量二项分布概率只需要计算一次 x <- 0:50 full_prob <- dbinom(x, size = 50, prob = 0.5) # 整理多场景对应的概率值 scenario_df <- data.frame( 场景 = c("全部50粒发芽", "最多5粒发芽", "至少4粒发芽", "其余场景"), 概率 = c( full_prob[x == 50], sum(full_prob[x <= 5]), sum(full_prob[x >= 4]), 1 - full_prob[x == 50] - sum(full_prob[x <=5]) - sum(full_prob[x >=4]) ) ) # 单图绘制多条件对比条形图 barplot(概率 ~ 场景, data = scenario_df, xlab = "发芽场景", ylab = "对应概率大小", col = c("#e63946", "#457b9d", "#1d3557", "#a8dadc"))
补充说明
如果你想要保留完整的二项分布概率条形图,同时高亮标注你关心的特殊场景区间,不需要重复生成两张独立的图,可以在全量分布的条形图基础上,通过修改柱形颜色、添加文本标注的方式,直接在同一图表中标记出对应场景的位置即可。
内容的提问来源于stack exchange,提问作者Aayush Khawaja
相关产品推荐
相关产品推荐

