2016-09-28 65 views
1

我无法用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添加这些点,但是我没有成功。

回答

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。也许还有一个,我没有运行该程序,所以我不知道。

+1

非常感谢你,斯蒂芬!你的代码让我意识到如何在我的情节中添加点。其实我用不同的方式写了,但我按照你的说法组织了我的数据!我创建了一个“x”列来指示这些点在哪里(如果有的话)应该是情节!有效。 非常感谢! –

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

+0

谢谢马克!你和Stephen帮助我了解我应该如何组织我的数据。我用'dose,time,genotype,b,mean(b),x'创建了一个数据集。正如你所看到的,我创建了一个“x”列来指示这些点应该在X轴上进行绘图的位置! 我也写道: 'geom_point(data = data,aes(y =“mean(b)”,x = x),color =“red”,size = 1.5)'绘制右边坐标上的点。有效! 非常感谢! –

相关问题