R ggplot:text&图形下方的图形

时间:2014-04-29 10:11:14

标签: r text graphics ggplot2 annotations

我在ggplot中使用facet创建了一个分类数据图。

示例脚本:

#script to produce plot with dummy data

rm(list=ls(all=TRUE))

library(ggplot2)
require(gridExtra)




#put dummy data in df   
dummy_data<-data.frame(experiment_number=c(rep("exp_1",15),rep("exp_2",15)),
   group=rep(c("A","B","C"),5),yvalue=runif(30, 0.0, 0.05))

# make plot

plot1<-ggplot(data = dummy_data)+
        geom_point(aes(x = group, y =  yvalue,
                    colour=group,shape=group),size=3.5,position = position_jitter(w = 0.2)) +
        facet_wrap( ~ experiment_number) +
        ylab("yvalue") +
        xlab("") 

#plot
plot1

我现在要添加文字&amp;在图下方的条形图显示与组之间的统计测试相关的p值 - 我刚刚在我手中绘制它的示例(p值刚刚组成)。 example of how I want plot to look

注意两个不同面板中的p值会有所不同。我玩过annotate&amp;自定义注释但似乎无法使其工作。有什么想法吗?

非常感谢

1 个答案:

答案 0 :(得分:2)

这是一种完全荒谬的方式来做类似于你所要求的事情。我用geom_errorbar作为条形,所以我不得不翻转坐标系。无论如何,你应该能够自定义它来做你需要的。

rm(list=ls(all=TRUE))    
library(ggplot2)

#put dummy data in df   
dummy_data<-data.frame(experiment_number=c(rep("exp_1",15),rep("exp_2",15)),
                       group=rep(c("A","B","C"),5),yvalue=runif(30, 0.0, 0.05))
# make plot 
plot1<-ggplot(data = dummy_data)+
  geom_point(aes(y = group, x =  yvalue, #changed x and y
                 colour=group,shape=group),size=3.5,position = position_jitter(h = 0.2)) + # changed w=... to h=...
  facet_wrap( ~ experiment_number) +
  xlab("yvalue") +
  ylab("") + coord_flip() # flipped coordinate system

#plot
rng <- range(dummy_data$yvalue) # range
df.lines <- data.frame(ymin=LETTERS[1:3], ymax=LETTERS[c(2,3,1)], x=rng[1]-diff(rng)*1:3/12) #data for geom_errorbar
# data for geom_text
df.txt <- data.frame(y=c("AB", "BC", "B"),
                     x=rng[1]-diff(rng)*(1:3+.5)/12, 
                     label=c("p=0.003", "p=0.05", "p=0.6", 
                              "p=0.2", "p=0.1", "p=0.05"), 
                     experiment_number=rep(c("exp_1", "exp_2"), each=3))
# add some space and geom_errorbar and geom_text
plot2 <- plot1 + scale_x_continuous(limits=c(rng[1]-diff(rng)/3, rng[2]+diff(rng)/5)) +
  geom_errorbar(data=df.lines, aes(x=x, ymin=ymin, ymax=ymax)) +
  scale_y_discrete(breaks=LETTERS[1:3], limits=c("A", "AB", "B", "BC", "C")) +
  geom_text(data=df.txt, aes(x=x, y=y, label=label), xjust=0.5) 

plot2

enter image description here