Modifique os labels do eixo x em cada faceta

Eu tenho este gráfico – eu gostaria de adicionar a cada etiqueta o texto N=xx para indicar o número de observações. Eu sei como fazer isso e fiz isso em charts sem facetas.

Quando tentei isso no gráfico facetado, ele não funcionou (eu obtive o mesmo N no tick aberto em todos os 3 charts, o mesmo N no Restricted, etc.)

Espero que alguém possa apontar o caminho para uma solução, como faço para controlar os elementos em uma determinada faceta?

 library(ggplot2) library(scales) stat_sum_single <- function(fun, geom="point", ...) { stat_summary(fun.y=fun, fill="red", geom=geom, size = 5, shape=24) } set.seed(1) data1 <- data.frame(Physicians_In=sample(1:3,100,replace=T),Physicians_Out=sample(1:3,100,replace=T),share=runif(100,0,1)) data1$Physicians_In <- factor(data1$Physicians_In,levels=c(1,2,3),labels=c("Open","Restricted","Closed")) data1$Physicians_Out <- factor(data1$Physicians_Out,levels=c(1,2,3),labels=c("Open","Restricted","Closed")) access_ch3 <- ggplot(data1,aes(x=Physicians_In,y=share,fill=Physicians_In))+geom_boxplot()+stat_sum_single(mean) access_ch3 <- access_ch3 +geom_jitter(position = position_jitter(width = .2),color="blue")+theme_bw() access_ch3 <- access_ch3 + theme(legend.position="none") +scale_y_continuous("Gammagard Share",labels=percent) gpo_labs5 <- paste(gsub("/","-\n",names(table(data1$Physicians_Out)),fixed=T),"\n(N=",table(data1$Physicians_Out),")",sep="") access_ch3 <- access_ch3 + scale_x_discrete("Physician Access (In Hospital)",labels=gpo_labs5) access_ch3 <- access_ch3 +facet_grid(.~Physicians_Out,labeller=label_both) access_ch3 

Eu tentei criar os 9 labels e passar esse vetor para o elemento scale_x_discrete , que apenas reciclou os 3 primeiros, então também não resolveu o problema.

Não é exatamente o que você quer fazer, mas acho que isso pode ser útil (pelo menos um bom começo)

 library(ggplot2) library(plyr) data1 <- ddply(data1,.(Physicians_Out,Physicians_In),transform,label = length(share)) ggplot(data1,aes(x=Physicians_In,y=share,fill=Physicians_In))+ geom_boxplot() + stat_sum_single(mean) + facet_grid(.~Physicians_Out,labeller=label_both,scales='free_x') + stat_summary(fun.y=min,aes(label=paste0('N=',label)),geom='text',col='blue',cex=5) 

insira a descrição da imagem aqui

Com os mesmos dados, segui uma abordagem em quatro etapas.

Primeiro: subconjunto dos dados

 open <- subset(data1, Physicians_Out == "Open") restr <- subset(data1, Physicians_Out == "Restricted") closed <- subset(data1, Physicians_Out == "Closed") 

Segundo: criar os labels para os diferentes subconjuntos

 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="") 

Terceiro: criar um tema para remover os labels e texto do eixo y dos sub-charts do 2º e 3º

 mytheme <- theme( axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank() ) 

Finalmente: criando o gráfico

 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) 

Que dá o seguinte resultado:

insira a descrição da imagem aqui