Показ нескольких подписей оси с помощью ggplot2 с facet_wrap в R

У меня есть хороший facet_wrap график плотности, с которым я создал ggplot2. Я хотел бы за каждую панель иметь подписи оси X и Y вместо того, чтобы только иметь маркировки оси y вдоль левой стороны и маркировки x вдоль нижней части. Что я имею, прямо сейчас похож на это:

library(ggplot2)
myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T)
myValues <- rnorm(300)
df <- data.frame(myGroups, myValues)


p <- ggplot(df)  + 
  geom_density(aes(myValues), fill = alpha("#335785", .6)) + 
  facet_wrap(~ myGroups)
p

Который возвращается:

alt text
(источник: cerebralmastication.com)

Кажется, что это должно быть просто, но мой Google Fu был слишком плох для нахождения ответа.

10
задан JD Long 24 July 2019 в 16:34
поделиться

1 ответ

Краткий ответ: Вы не можете этого сделать. Это может иметь смысл с тремя графами, но что, если у вас есть большая решетка из 32 графов? Это выглядело бы шумно и плохо. Философия GGplot заключается в том, чтобы делать правильные вещи с минимумом настроек, что, естественно, означает, что вы не можете настраивать вещи так же сильно, как другие пакеты.

Длинный ответ: вы можете подделать это, построив три отдельных объекта ggplot и комбинируя их. Но это не очень общее решение. Вот код из книги Хэдли, который предполагает, что вы создали объекты ggplot a, b и c. Он помещает a в верхнюю строку, а b и c в нижнюю.

grid.newpage()
pushViewport(viewport(layout=grid.layout(2,2)))
vplayout<-function(x,y)
    viewport(layout.pos.row=x,layout.pos.col=y)
print(a,vp=vplayout(1,1:2))
print(b,vp=vplayout(2,1))
print(c,vp=vplayout(2,2))
8
ответ дан 3 December 2019 в 18:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: