Ich habe oft numerische Werte für das Facettieren. Ich möchte ausreichende Informationen bereitstellen, um diese Facettenwerte in einem ergänzenden Titel zu interpretieren, ähnlich wie bei den Achsentiteln. Die Beschriftungsoptionen wiederholen viel unnötigen Text und sind für längere variable Titel unbrauchbar.
Irgendwelche Vorschläge?
Der Standard:
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)
Was ich lieben würde:
Das Beste, was ich in ggplot tun kann:
qplot(data=test, x=x, y=y)+facet_grid(facet.b~facet.a, labeller=label_both)
Wie von @Hendy angegeben, ähnlich wie: Hinzufügen einer sekundären y-Achse zu ggplot2-Plots - machen Sie es perfekt
Antworten:
Da die neuesten
ggplot2
Anwendungengtable
intern verwendet werden, ist es recht einfach, eine Zahl zu ändern: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)
Natürlich können Sie eine Funktion schreiben, die die Streifenbeschriftungen automatisch hinzufügt. Eine zukünftige Version von verfügt
ggplot2
möglicherweise über diese Funktionalität. Ich bin mir allerdings nicht sicher.quelle
ggplotGrob()
dasselbe vor wieggplot_gtable(ggplot_build())
. Ich denke, das ist immer noch der beste Weg.Es gibt vielleicht einen besseren Weg, aber Sie können:
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
quelle
Zusätzlich zu der von kohske beschriebenen Methode können Sie den durch Ändern hinzugefügten Feldern einen Rahmen hinzufügen
col=NA
zu
col=gray(0.5), linetype=1
Ändern Sie auch
fill=gray(0.5)
zum
fill=grey(0.8)
und
gp=gpar(col=gray(1))
zu
gp=gpar(col=gray(0))
Wenn Sie möchten, dass die neuen Balken mit den Facettenbeschriftungen übereinstimmen
dh
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)))
quelle