Como você adiciona um label geral às facetas no ggplot2?

Muitas vezes tenho valores numéricos para lapidação. Desejo fornecer informações suficientes para interpretar esses valores facetados em um título suplementar, semelhante aos títulos dos eixos. As opções da rotuladora repetem muito texto desnecessário e são inutilizáveis ​​para títulos de variables ​​mais longos.

Alguma sugestão?

O padrão:

test<-data.frame(x=1:20, y=21:40, facet.a=rep(c(1,2),10), facet.b=rep(c(1,2), each=20)) qplot(data=test, x=x, y=y, facets=facet.b~facet.a) 

insira a descrição da imagem aqui

O que eu adoraria

insira a descrição da imagem aqui

O melhor que posso fazer no ggplot:

 qplot(data=test, x=x, y=y)+facet_grid(facet.b~facet.a, labeller=label_both) 

insira a descrição da imagem aqui

Como indicado por @Hendy, semelhante a: adicionar um eixo y secundário aos charts ggplot2 – torná-lo perfeito

Como o ultimo ggplot2 usa gtable internamente, é muito fácil modificar uma figura:

 library(ggplot2) test <- data.frame(x=1:20, y=21:40, facet.a=rep(c(1,2),10), facet.b=rep(c(1,2), each=20)) p <- qplot(data=test, x=x, y=y, facets=facet.b~facet.a) # get gtable object z <- ggplotGrob(p) library(grid) library(gtable) # add label for right strip z <- gtable_add_cols(z, unit(z$widths[[7]], 'cm'), 7) z <- gtable_add_grob(z, list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))), textGrob("Variable 1", rot = -90, gp = gpar(col = gray(1)))), 4, 8, 6, name = paste(runif(2))) # add label for top strip z <- gtable_add_rows(z, unit(z$heights[[3]], 'cm'), 2) z <- gtable_add_grob(z, list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))), textGrob("Variable 2", gp = gpar(col = gray(1)))), 3, 4, 3, 6, name = paste(runif(2))) # add margins z <- gtable_add_cols(z, unit(1/8, "line"), 7) z <- gtable_add_rows(z, unit(1/8, "line"), 3) # draw it grid.newpage() grid.draw(z) 

insira a descrição da imagem aqui

Claro, você pode escrever uma function que adicione automaticamente as etiquetas de faixa. Uma versão futura do ggplot2 pode ter essa funcionalidade; não tenho certeza embora.

Além do método descrito pelo kohske, você pode adicionar uma borda às checkboxs adicionadas alterando

 col=NA 

para

 col=gray(0.5), linetype=1 

Além disso, mude

 fill=gray(0.5) 

para

 fill=grey(0.8) 

e

 gp=gpar(col=gray(1)) 

para

 gp=gpar(col=gray(0)) 

Se você quiser que as novas barras correspondam aos labels facetados

ou seja

 z <- gtable_add_grob(z, list(rectGrob(gp = gpar(col = gray(0.5), linetype=1, fill = gray(0.8))), textGrob("Variable 1", rot = -90, gp = gpar(col = gray(0)))), 4, 8, 6, name = paste(runif(2))) 

Pode haver uma maneira melhor de fazer isso, mas você pode:

 fac1 = factor(rep(c('a','b'),10)) fac2 = factor(rep(c('a','b'),10)) data = data.frame(x=1:10, y=1:10, fac1=fac1, fac2=fac2) p = ggplot(data,aes(x,y)) + ggplot2::geom_point() + facet_grid(fac1~fac2) p + theme(plot.margin = unit(c(1.5,1.5,0.2,0.2), "cm")) grid::grid.text(unit(0.98,"npc"),0.5,label = 'label ar right', rot = 270) # right grid::grid.text(unit(0.5,"npc"),unit(.98,'npc'),label = 'label at top', rot = 0) # top 
Intereting Posts