Отображение меток нескольких осей с использованием ggplot2 с facet_wrap в R - PullRequest
8 голосов
/ 07 октября 2009

У меня есть хороший график плотности facet_wrap, который я создал с помощью ggplo2. Я хотел бы, чтобы на каждой панели были метки осей 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 был слишком беден, чтобы найти ответ.

Ответы [ 2 ]

11 голосов
/ 19 мая 2011

Вы можете сделать это, включив параметр scale = "free" в вызов facet_wrap:

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, scales="free")
p
8 голосов
/ 07 октября 2009

Краткий ответ: Вы не можете этого сделать. Это может иметь смысл с 3 графиками, но что если у вас большая решетка из 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...