我想要一个使用ggplot2的条形图,在每个组中显示多个条形图,但在我的情节中,我有4个条形而不是每组8个条形图。我将感谢你的帮助。 这是我的代码:
levels = c('D', 'S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7', 'S8', 'S9')
method = c('G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7','G8')
ave = c(4, 4, 4, 4, 5, 1, 2, 6, 3, 5, 2, 2, 2, 2, 5, 3, 4, 1, 1, 1, 2,
2, 2, 2, 3, 3, 2, 1, 1, 1, 1, 3, 4, 5, 6, 8, 9, 7, 1, 2, 3, 3, 4, 5, 7,
6, 1, 1, 1, 2, 5, 7, 7, 8, 9, 1, 4, 6, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
levels = factor(c(rep(levels,8)))
method = factor(c(rep(method,10)))
dat = data.frame(levels,ave,method)
dodge = position_dodge(width = .9)
p = ggplot(dat,mapping =aes(x = as.factor(levels),y = ave,fill =
as.factor(method)))
p + geom_bar(stat = "identity",position = "dodge") +
xlab("levels") + ylab("Mean")
答案 0 :(得分:1)
看起来geom_bar
只能绘制存在的观测值;如果你想为每个方法都有条形(假设你希望每个级别的每个方法都有一个条形图),你需要在数据中对应这些配对。目前,看起来每个级别最多对应两种方法。要人工生成这些配对,您可以在绘图之前使用tidyr::complete()
和tidyr::expand()
。对于每个新配对,ave
将自动分配NA
,但您可以使用fill
中的tidyr::complete()
参数更改此行为。
以下是每个新配对而不是ave
将NA
设置为0的示例:
dat %>%
complete(expand(dat, levels, method), fill = list(ave = 0)) %>%
ggplot(df4,mapping = aes(x = as.factor(levels),
y = ave,
fill = as.factor(method),
)) +
geom_bar(stat = "identity", position = position_dodge(width = 1))+
xlab("levels") +
ylab("Mean")