Pergunta

Eu tenho um belo lote de densidade facet_wrap que eu criei ggplot2. Eu gostaria que cada painel tivesse rótulos de eixo X e Y, em vez de apenas ter os rótulos do eixo Y ao longo do lado esquerdo e os rótulos X ao longo da parte inferior. O que eu tenho agora se parece com isto:

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

Que retorna:

alt text
(fonte: cerebralmastication.com)

Parece que isso deve ser simples, mas meu Google Fu tem sido pobre demais para encontrar uma resposta.

Foi útil?

Solução

Você pode fazer isso incluindo a opção Scales = "Free" em sua chamada 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

enter image description here

Outras dicas

Resposta curta: Você não pode fazer isso. Pode fazer sentido com 3 gráficos, mas e se você tivesse uma grande rede de 32 gráficos? Isso pareceria barulhento e ruim. A filosofia do GGPlot é fazer a coisa certa com um mínimo de personalização, o que significa, naturalmente, que você não pode personalizar as coisas tanto quanto outros pacotes.

Resposta longa: Você pode fingir, construindo três objetos GGPlot separados e combinando -os. Mas não é uma solução muito geral. Aqui está algum código do livro de Hadley que assume que você criou objetos GGPlot A, B e C. Ele coloca um na linha superior, com B e C na linha inferior.

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))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top