我想使用ggplot2
创建一个条形图,其中有条形图(男性,女性)和组(研究1,研究2 ......)的组别和轴标记。以下是我希望我的图表显示的方式:
还有一些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'))
答案 0 :(得分:8)
受@Sandy Muspratt的启发,回答this SO question。
首先,创建并另存为没有图例的对象图,并使用Female
将x轴标签更改为Male
或scale_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 1
,Study 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)