我的目标是使用ggplot2生成两个重叠的二项式分布的PMF,根据我指定的颜色进行颜色编码,并在图例的底部。
到目前为止,我想我已经正确设置了数据框。
successes <- c(seq(0,10,1),seq(0,10,1))
freq <- c(dbinom(seq(0,10,1),10,0.2),dbinom(seq(0,10,1),10,0.8))
class <- c(rep(' A ',11),rep(' B ',11))
df1 <- data.frame(cbind(successes,freq,class))
但是,这给出了错误的结果。
library(ggplot2)
g <- ggplot(df1, aes(successes),y=freq)
g + geom_bar(aes(fill = class))
我觉得我在举一个例子,却得到了完全不同的结果。 (几乎)这样做是我想要的:如果它给出相对频率,那将是准确的。
g <- ggplot(mpg, aes(class))
g + geom_bar(aes(fill = drv))
几个问题:
1)我的代码块哪里出问题了?
2)是否有更好的方法可以在一张图中显示PMF?我不确定要使用直方图还是条形图。
3)如何设置此项以使我能够选择颜色?
4)如何在x轴上排序值?它们不是类别。它们是数字0-10,并且具有我要保留的自然顺序。
谢谢!
更新
以下两个模块有效。
successes <- c(seq(0,10,1),seq(0,10,1))
freq <- c(dbinom(seq(0,10,1),10,0.2),dbinom(seq(0,10,1),10,0.8))
class <- c(rep(' A ',11),rep(' B ',11))
df1 <- data.frame(successes,freq,class)
ggplot(df1, aes(successes ,y=freq, fill = class)) +
geom_bar(stat = "identity") +
scale_x_continuous(breaks = seq(0,10,1)) +
scale_fill_manual(values = c("blue", "green")) + theme_bw()
AND
successes <- c(seq(0,10,1),seq(0,10,1))
freq <- c(dbinom(seq(0,10,1),10,0.2),dbinom(seq(0,10,1),10,0.8))
class <- c(rep(' A ',11),rep(' B ',11))
df1 <- data.frame(successes,freq,class)
ggplot(df1, aes(x=successes,y=freq),y=freq) +
geom_col(aes(fill = class)) +
scale_x_continuous(breaks = seq(0,10,1)) +
scale_fill_manual(values = c("blue", "green")) + theme_bw()
答案 0 :(得分:1)
这是您要找的吗?
library(ggplot2)
g <- ggplot(df1, aes(successes ,y=freq, fill = class))
g + geom_bar(stat = "identity") +
scale_fill_manual(values = c("blue", "green"))
当然,请记住,您确实需要将数据框的创建更改为:
successes <- c(seq(0,10,1),seq(0,10,1))
freq <- c(dbinom(seq(0,10,1),10,0.2),dbinom(seq(0,10,1),10,0.8))
class <- c(rep(' A ',11),rep(' B ',11))
df1 <- data.frame(successes,freq,class)
如评论中所建议。
答案 1 :(得分:1)
我认为您的问题是,创建df1时,成功和频率已被更改为因素
也许这就是您的想法?
successes <- c(seq(0,10,1),seq(0,10,1))
freq <- c(dbinom(seq(0,10,1),10,0.2),dbinom(seq(0,10,1),10,0.8))
class <- c(rep(' A ',11),rep(' B ',11))
df1 <- data.frame(successes = as.numeric(successes), freq = as.numeric(freq), class)
ggplot(df1, aes(x = successes, y = freq)) +
geom_bar(stat = "identity", aes(fill = class))
如果没有,很高兴回答任何其他问题!