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)
Ce que j’aimerais
Le mieux que je puisse faire dans ggplot:
qplot(data=test, x=x, y=y)+facet_grid(facet.b~facet.a, labeller=label_both)
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)
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