Comment append une étiquette générale aux facettes de ggplot2?

J’ai souvent des valeurs numériques pour les facettes. Je souhaite fournir des informations suffisantes pour interpréter ces valeurs de facettage dans un titre supplémentaire, similaire aux titres des axes. Les options de l’étiqueteuse répètent beaucoup de texte inutile et sont inutilisables pour les titres de variables plus longs.

Aucune suggestion?

Le défaut:

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) 

entrer la description de l'image ici

Ce que j’aimerais

entrer la description de l'image ici

Le mieux que je puisse faire dans ggplot:

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

entrer la description de l'image ici

Comme indiqué par @Hendy, similaire à: append un axe y secondaire aux tracés ggplot2 – le rendre parfait

Comme la dernière version de ggplot2 utilise gtable interne, il est assez facile de modifier une figure:

 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) 

entrer la description de l'image ici

Bien sûr, vous pouvez écrire une fonction qui ajoute automatiquement les étiquettes de bande. Une future version de ggplot2 peut avoir cette fonctionnalité; pas sûr cependant.

En plus de la méthode décrite par kohske, vous pouvez append une bordure aux boîtes ajoutées en changeant

 col=NA 

à

 col=gray(0.5), linetype=1 

Aussi changer

 fill=gray(0.5) 

pour

 fill=grey(0.8) 

et

 gp=gpar(col=gray(1)) 

à

 gp=gpar(col=gray(0)) 

Si vous voulez que les nouvelles barres correspondent aux étiquettes de facette

c’est à dire

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

Il y a peut-être une meilleure façon de le faire, mais vous pouvez:

 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