如何绘制条形图中单个因子的平均值

时间:2016-09-28 16:42:47

标签: r ggplot2 bar-chart factorial points

我无法用ggplot2创建一个数字。 在这个图中,我使用geom_bar绘制三个因子。我的意思是,对于每个“时间”和“剂量”,我正在绘制两个条形(两种基因型)。

更具体地说,这就是我的意思: enter image description here

这是我的代码,直到现在(实际上我改变了一些设置,但我正在展示它的需要):

 ggplot(data=data, aes(x=interaction(dose,time), y=b,  fill=factor(genotype)))+
 geom_bar(stat="identity", position="dodge")+
 scale_fill_grey(start=0.3, end=0.6, name="Genotype")

问题:我打算使用点添加每个时间的平均值,并且这些点位于某个时间的条形图的中间。我该怎么办?

我尝试使用geom_dotplot和geom_point添加这些点,但我没有成功。

2 个答案:

答案 0 :(得分:1)

library(dplyr)
time_data = data %>% group_by(time) %>% summarize(mean(b))
data <- inner_join(data,time_data,by = "time")

这为您提供附加方法的数据。现在制作情节

 ggplot(data=data, aes(x=interaction(dose,time), y=b,fill=factor(genotype)))+
 geom_bar(stat="identity", position="dodge")+
 scale_fill_grey(start=0.3, end=0.6, name="Genotype")+
 geom_text(aes(b),vjust = 0)

您可能需要在geom_text语句中使用参数hjust和vjust。也许aes也是,我没有运行程序所以我不知道。

答案 1 :(得分:1)

如果您能提供可重复的示例,通常会有所帮助。在这里,我制作了一些自己的数据。

sampleData <-
  data.frame(
    dose = 1:3
    , time = rep(1:3, each = 3)
    , genotype = rep(c("AA","aa"), each = 9)
    , b = rnorm(18, 20, 5)
  )

你需要在某个地方计算出手段,我选择在飞行中做到这一点。请注意,我使用一条线来表示所有这些值的均值,而不是使用点。我的排序也有些不同,并使用facet_wrap将事物聚集在一起。积分将更难以放置,特别是在使用position_dodge时,但您可能会修改此代码以实现此目的。

ggplot(
  sampleData
  , aes(x = dose
        , y = b
        , fill = genotype)
  ) +
  geom_bar(position = "dodge", stat = "identity") +
  geom_hline(data = 
               sampleData %>%
               group_by(time) %>%
               summarise(meanB = mean(b)
                         , dose = NA, genotype = NA)
             , aes(yintercept = meanB)
             , col = "black"
              ) +
  facet_wrap(~time)

enter image description here