R:ggplot每组内有多个条形图

时间:2018-02-19 01:51:20

标签: r ggplot2 bar-chart

我想要一个使用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")

1 个答案:

答案 0 :(得分:1)

看起来geom_bar只能绘制存在的观测值;如果你想为每个方法都有条形(假设你希望每个级别的每个方法都有一个条形图),你需要在数据中对应这些配对。目前,看起来每个级别最多对应两种方法。要人工生成这些配对,您可以在绘图之前使用tidyr::complete()tidyr::expand()。对于每个新配对,ave将自动分配NA,但您可以使用fill中的tidyr::complete()参数更改此行为。

以下是每个新配对而不是aveNA设置为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")