With the same data, I followed a four-step approach.
First: a subset of data
open <- subset(data1, Physicians_Out == "Open") restr <- subset(data1, Physicians_Out == "Restricted") closed <- subset(data1, Physicians_Out == "Closed")
Second: creating labels for different subsets
labs.open <- paste(gsub("/","-\n",names(table(open$Physicians_In)),fixed=T), "\n(N=",table(open$Physicians_In),")",sep="") labs.restr <- paste(gsub("/","-\n",names(table(restr$Physicians_In)),fixed=T), "\n(N=",table(restr$Physicians_In),")",sep="") labs.closed <- paste(gsub("/","-\n",names(table(closed$Physicians_In)),fixed=T), "\n(N=",table(closed$Physicians_In),")",sep="")
Third: create a theme to remove the y-axis labels and text for the 2nd and 3rd subgraphs
mytheme <- theme( axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank() )
Finally: creating a graph
p1 <- ggplot(open,aes(x=Physicians_In,y=share,fill=Physicians_In)) + geom_boxplot() + stat_sum_single(mean) + geom_jitter(position = position_jitter(width = .2),color="blue") + guides(fill=FALSE) + ggtitle(paste("Physician Access (Out): Open\nN = (", nrow(open), ")\n")) + scale_y_continuous("Gammagard Share",labels=percent) + scale_x_discrete("\nPhysician Access (In Hospital)",labels=labs.open) + theme_bw() p2 <- ggplot(restr,aes(x=Physicians_In,y=share,fill=Physicians_In)) + geom_boxplot() + stat_sum_single(mean) + geom_jitter(position = position_jitter(width = .2),color="blue") + guides(fill=FALSE) + ggtitle(paste("Physician Access (Out): Restricted\nN = (", nrow(restr), ")\n")) + scale_x_discrete("\nPhysician Access (In Hospital)",labels=labs.restr) + theme_bw() + mytheme p3 <- ggplot(closed,aes(x=Physicians_In,y=share,fill=Physicians_In)) + geom_boxplot() + stat_sum_single(mean) + geom_jitter(position = position_jitter(width = .2),color="blue") + guides(fill=FALSE) + ggtitle(paste("Physician Access (Out): Closed\nN = (", nrow(closed), ")\n")) + scale_x_discrete("\nPhysician Access (In Hospital)",labels=labs.closed) + theme_bw() + mytheme library(gridExtra) grid.arrange(p1, p2, p3, ncol=3)
Which gives the following result:
