R / ggplot: vertical bar text with facet_wrap

I use ggplot in R to build multiple conditions using facet_wrap. I would like to place a strip with the name of the chart on the vertical axis on the right, and not on top.

This is an example:

library(ggplot2) dat<- data.frame(name= rep(LETTERS[1:5], each= 4), value= rnorm(20), time= rep(1:5, 4)) gg<- ggplot(data= dat, aes(x= time, y= value)) + geom_point() + facet_wrap(~ name, ncol= 1) 

enter image description here Here the names of the plots (A, B, C, D, E) are on top, I would like them to be on the right, as here:

 gg + facet_grid(name ~ .) 

enter image description here

Is there an easy way to do this? (I do not use facet_grid since I would like to use the nrow and ncol options that come with facet_wrap ).

Thanks! Dario

 sessionInfo() R version 3.0.1 (2013-05-16) Platform: x86_64-apple-darwin10.8.0 (64-bit) locale: [1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] ggplot2_0.9.3.1 loaded via a namespace (and not attached): [1] colorspace_1.2-4 dichromat_2.0-0 digest_0.6.4 grid_3.0.1 [5] gtable_0.1.2 labeling_0.2 MASS_7.3-29 munsell_0.4.2 [9] plyr_1.8.1 proto_0.3-10 RColorBrewer_1.0-5 Rcpp_0.11.0 [13] reshape2_1.2.2 scales_0.2.3 stringr_0.6.2 tools_3.0.1 
+5
source share
2 answers

For future reference, you can now use strip.position="right" to place them on the right side , for example:

 library(ggplot2) dat<- data.frame(name= rep(LETTERS[1:5], each= 4), value= rnorm(20), time= rep(1:5, 4)) gg<- ggplot(data= dat, aes(x= time, y= value)) + geom_point() + facet_wrap(~ name, ncol= 1, strip.position="right") 
+2
source

If you want facet labels on the left side of the faces, then there is a simple solution where the y axis becomes the x axis and the x axis becomes the y axis.

 library(ggplot2) library(gridExtra) library(gridGraphics) # standard plot, facet labels on top ggplot(diamonds) + aes(x = carat, y = price) + geom_point() + facet_wrap( ~ cut) 

enter image description here

 # Use the gridExtra and gridGraphics utilities to rotate the plot. # This requires some modifications to the axes as well. Note the use of # a negative carat in the aes() call, and text modifications with theme() grid.newpage() pushViewport(viewport(angle = 90)) grid.draw(ggplotGrob( ggplot(diamonds) + aes(x = price, y = -carat) + geom_point() + facet_wrap( ~ cut) + scale_y_continuous(name = "Carat", breaks = -seq(0, 5, by = 1), labels = seq(0, 5, by = 1)) + theme(axis.text.y = element_text(angle = 270), axis.title.y = element_text(angle = 270), axis.text.x = element_text(angle = 270)) )) 

enter image description here

facet_wrap marks will be facet_wrap to the right side of the rotated chart with a rotation angle of -90 . However, this will have an effective x axis on top of the graphs. You will need to work with the code to move the labels of the Y axis from left to right of the β€œstandard” chart, and then rotate, as shown here, by -90 .

+1
source

Source: https://habr.com/ru/post/1213242/


All Articles