2013-04-29 31 views
7

我想創建使用ggplot2與迴避組和軸標籤兩者的棒(男,女)和基團的條形圖(研究1,研究2 ...)。這裏是我想我的圖表看:軸標籤爲每個條和各組條形圖與迴避基

enter image description here

和一些R代碼裏面。在這種情況下,只有組標記在軸上(而不是組內的條)。軸上的條形標籤基本上代替了圖例。

x  = runif(8) 
gender = factor(c("male","female","male","female","male","female","male","female")) 
group = c(0,0,1,1,2,2,3,3) 
df  = data.frame(x,gender,group) 

ggplot(df,aes(x=group,y=x,fill=gender)) + 
    geom_bar(stat="identity",position="dodge") + 
    scale_x_continuous("",breaks=c(0:3), 
     labels=c('G1','G2','G3','G4')) 

enter image description here

回答

8

通過@Sandy Muspratt答案上this SO question啓發。

首先,創建並保存爲沒有圖例並將x軸標籤更改爲FemaleMale並使用scale_x_continuous()的對象圖。在theme()plot.margin=積下添加額外的空間。

library(ggplot2) 
library(gridExtra) 
p<-ggplot(df,aes(x=group,y=x,fill=gender)) + 
    geom_bar(stat="identity",position="dodge") + 
    scale_x_continuous("",breaks=c(-0.25,0.25,0.75,1.25,1.75,2.25,2.75,3.25), 
        labels=rep(c("Female","Male"),times=4))+ 
    theme(legend.position="none")+ 
    theme(plot.margin = unit(c(1,2,3,1), "lines")) 
與功能 annotation_custom()

現在和textGrob()添加標籤Study 1Study 2情節設置x和y座標(負座標y的把標籤的情節下)下。

p1<-p+annotation_custom(grob=textGrob("Study 1"), 
          xmin=0,xmax=0,ymin=-.2,ymax=-0.2)+ 
     annotation_custom(grob=textGrob("Study 2"), 
          xmin=1,xmax=1,ymin=-.2,ymax=-0.2)+ 
     annotation_custom(grob=textGrob("Study 3"), 
          xmin=2,xmax=2,ymin=-.2,ymax=-0.2)+ 
     annotation_custom(grob=textGrob("Study 4"), 
          xmin=3,xmax=3,ymin=-.2,ymax=-0.2) 

爲了確保繪製新標籤,您應該將繪圖轉換爲grobs對象,然後禁用裁剪。

gt <- ggplot_gtable(ggplot_build(p1)) 
gt$layout$clip[gt$layout$name=="panel"] <- "off" 
grid.draw(gt) 

enter image description here