R / ggplot: текст с вертикальной полосой и facet_wrap

Я использую ggplot в R для построения нескольких условий с помощью facet_wrap. Полоску с названием сюжета я бы хотел расположить на вертикальной оси справа, а не сверху.

Это пример:

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)

введите описание изображения здесьЗдесь названия сюжетов (A, B, C, D, E) сверху, I я бы хотел, чтобы они были справа, как здесь:

gg + facet_grid(name ~ .)

введите описание изображения здесь

Есть ли простой способ сделать это? (Я не использую facet_grid, так как хотел бы использовать параметры nrow и ncol, которые идут с facet_wrap).

Спасибо! Дарио

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       

person dariober    schedule 12.02.2015    source источник
comment
Не думаю, что это будет легко. Единственное, что я могу представить, - это создать фиктивную переменную и использовать ее с facet_grid. Вы всегда можете попробовать манипуляции на низком уровне с grid/gridExtra, но это сложный путь.   -  person tonytonov    schedule 13.02.2015
comment
Хорошо, спасибо за отзыв. Я думаю, что путь с фиктивной переменной является самым простым, хотя я не хочу изменять данные только в эстетических целях.   -  person dariober    schedule 13.02.2015


Ответы (2)


Для дальнейшего использования теперь вы можете использовать strip.position="right", чтобы разместить их справа, например:

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")
person Zeke    schedule 23.01.2017
comment
Этот параметр теперь переключается, например facet_wrap(~ name, ncol= 1, switch='y') - person Kyouma; 16.06.2020
comment
На самом деле это может показаться просто отображением текста полосы, который уже находится справа слева: rdocumentation.org/packages/ggplot2/versions/3.3.1/topics/ - person Zeke; 17.06.2020

Если вы хотите, чтобы метки фасетов располагались слева от фасетов, то есть простое решение, при котором ось Y становится осью x, а ось x становится осью y.

library(ggplot2)
library(gridExtra)
library(gridGraphics)

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

введите здесь описание изображения

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

введите здесь описание изображения

Перемещение меток facet_wrap в правую часть повернутой графики будет выполняться с углом поворота -90. Однако в этом случае эффективная ось абсцисс будет наверху графиков. Вам нужно будет поработать над кодом для перемещения меток оси Y слева направо от «стандартного» графика, а затем повернуть, как показано здесь с помощью -90.

person Peter    schedule 02.11.2015
comment
Это интересный и довольно простой подход, спасибо! Есть идеи, как обеспечить, чтобы размер результирующего графика не выходил за пределы области просмотра? - person cashoes; 14.04.2016