每个条形图的轴标签以及带有躲闪组的条形图中的每个组

时间:2013-04-29 13:01:02

标签: r ggplot2

我想使用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

1 个答案:

答案 0 :(得分:8)

受@Sandy Muspratt的启发,回答this SO question

首先,创建并另存为没有图例的对象图,并使用Female将x轴标签更改为Malescale_x_continuous()。使用plot.margin=中的theme()在地块下添加额外空间。

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()在情节设置x和y坐标下添加标签Study 1Study 2(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