ggplot2:geom_bar with group,position_dodge和fill

时间:2015-07-28 21:25:35

标签: r ggplot2 geom-bar

我正在尝试生成一个条形图,使得x轴是患者,每个患者都有多个样本。例如(使用mtcars数据作为数据外观的模板):

library("ggplot2")
ggplot(mtcars, aes(x = factor(cyl), group = factor(gear))) +
   geom_bar(position = position_dodge(width = 0.8), binwidth = 25) +
   xlab("Patient") +
   ylab("Number of Mutations per Patient Sample")

这会产生这样的结果:

enter image description here

每个条形图代表每个患者的样本。

我想通过使用颜色填充条形图(例如每个患者样本中的不同类型的突变)来添加关于每个患者样本的额外信息。我以为我可以像这样指定fill参数:

ggplot(mtcars, aes(x = factor(cyl), group = factor(gear), fill = factor(vs))) +
   geom_bar(position = position_dodge(width = 0.8), binwidth = 25) +
   xlab("Patient") +
   ylab("Number of Mutations per Patient Sample")

但是这不会为每个患者样本条形图产生“堆积条形图”。我假设这是因为position_dodge()已设置。反正有没有绕过这个?基本上,我想要的是:

ggplot(mtcars, aes(x = factor(cyl), fill = factor(vs))) +
   geom_bar() +
   xlab("Patient") +
   ylab("Number of Mutations per Patient Sample")

enter image description here

但是我列出的第一个图中有这些颜色。这可能与ggplot2一起使用吗?

4 个答案:

答案 0 :(得分:6)

我认为facets是你最接近你想要的东西:

ggplot(mtcars, aes(x = factor(gear), fill = factor(vs))) +
    geom_bar(position = position_dodge(width = 0.8), binwidth = 25) +
    xlab("Patient") +
    ylab("Number of Mutations per Patient Sample") +
    facet_wrap(~cyl)

result of plot

我在ggplot2的问题跟踪器中找不到任何相关内容。

答案 1 :(得分:1)

我已经通过按照我喜欢的顺序将多个geom_cols按层叠在一起来破解了几次。例如,代码

    ggplot(data, aes(x=cert, y=pct, fill=Party, group=Treatment, shape=Treatment)) +
      geom_col(aes(x=cert, y=1), position=position_dodge(width=.9), fill="gray90") +
      geom_col(position=position_dodge(width=.9)) +
      scale_fill_manual(values=c("gray90", "gray60"))

允许我制作您无需刻面的功能。请注意我如何将背景图层的y值设置为1.要添加更多图层,您可以累计对变量求和。

情节图片:

plot

答案 2 :(得分:0)

如果我正确理解了您的问题,您希望将aes()传入您的geom_bar图层。这将允许您传递填充美学。然后,您可以将条形图设置为“闪避”或“填充”,具体取决于您希望如何显示数据。

这里列出了一个简短的例子:

   ggplot(mtcars, aes(x = factor(cyl), fill = factor(vs))) +
      geom_bar(aes(fill = factor(vs)), position = "dodge", binwidth = 25) +
      xlab("Patient") +
      ylab("Number of Mutations per Patient Sample")

得到的情节:http://imgur.com/ApUJ4p2(抱歉S / O不允许我发布图片)

希望有所帮助!

答案 3 :(得分:0)

我想,我在这篇文章中的回答将帮助您构建每个患者多个堆叠竖条的图表......

Layered axes in ggplot?