是否有可能在R中彼此相邻的成功概率不同的二项式分布随机变量绘制直方图样条形图/线形图?
试验次数(n)和样本空间保持不变。只有成功的概率(p)是不同的。为了使条形彼此相邻,R代码的外观如何?
这是我的意思的一个小例子:
yval <- 0:10 # sample space
plot(dbinom(yval, 10, 0.5) ~ yval, type = "h", col = "black", ylim = c(0, 0.35))
lines(dbinom(yval, 10, 1/6) ~ yval, type = "h", col = "red")
lines(dbinom(yval, 10, 0.6) ~ yval, type = "h", col = "green")
legend("topright", legend = c("p = 0.5", "p = 1/6", "p = 0.6"),
col = c("black", "red", "green"), lty = 1, cex = 0.7)
使用此代码,线可相互绘制。我必须在这里更改什么?
谢谢。
答案 0 :(得分:1)
您的意思如下吗?
您可以在其他直方图的x值上添加一个小的偏移量:
yval <- 0:10 # sample space
plot(dbinom(yval, 10, 0.5) ~ yval, type = "h", col = "black", ylim = c(0, 0.35))
lines(dbinom(yval, 10, 1/6) ~ I(yval + 0.1), type = "h", col = "red") # + 0.1
lines(dbinom(yval, 10, 0.6) ~ I(yval + 0.2), type = "h", col = "green") # + 0.2
legend("topright", legend = c("p = 0.5", "p = 1/6", "p = 0.6"),
col = c("black", "red", "green"), lty = 1, cex = 0.7)
答案 1 :(得分:1)
要结束我的评论,这是我们可以使用barplot
进行的操作:
prob <- c(0.5, 1/6, 0.6)
yval <- 0:10
Y <- t(outer(yval, prob, dbinom, size = max(yval)))
barplot(Y, names.arg = yval, beside = TRUE, col = 1:3, border = 1:3,
legend.text = paste0("p = ", format(prob, digits = 2)))
只需将此作为替代。
备注1
请注意上面outer
的使用。为什么我们必须额外做t()
?我们不能只是这样做吗?
Y <- outer(prob, yval, dbinom, size = max(yval))
不。这会给您许多NaN
并带有警告。选中args(dbinom)
。函数dbinom
期望yval
位于prob
的前面。
备注2
使用barplot
可以很容易地为您产生一些“副作用”,如下所示(这样可以使您更容易比较它们的形状)。
prob <- c(0.5, 1/6, 0.6)
yval <- 0:10
Y <- outer(yval, prob, dbinom, size = max(yval)) ## no `t()` now
barplot(Y, names.arg = paste0("p = ", format(prob, digits = 2)), beside = TRUE)
未设置col
的{{1}}参数时,将使用灰色,其暗度与条形的高度成正比。