Questa è più etichette assi utilizzando ggplot2 con facet_wrap in R
-
20-09-2019 - |
Domanda
Ho una bella trama di densità facet_wrap che ho creato con ggplot2
. Desidero per ogni pannello di avere assi x ed y etichette invece di avere solo le etichette dell'asse y lungo il lato sinistro e le etichette x lungo la parte inferiore. Quello che ho in questo momento si presenta così:
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
che restituisce:
(fonte: cerebralmastication.com )
Sembra che questo deve essere semplice, ma la mia Google Fu è stato troppo povero per trovare una risposta.
Soluzione
È possibile farlo inserendo la bilancia = opzione "libera" nella chiamata 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
Altri suggerimenti
Risposta breve: non è possibile farlo. Potrebbe avere senso con 3 grafici, ma cosa succede se si ha avuto un grande reticolo di 32 grafici? Che starebbe rumoroso e cattivo. La filosofia di GGplot tratta di fare la cosa giusta con un minimo di personalizzazione, il che significa, naturalmente, che non è possibile personalizzare le cose tanto quanto altri pacchetti.
Risposta lunga: Si potrebbe fingere con la costruzione di tre oggetti ggplot separati e la loro combinazione. Ma non è una soluzione molto generale. Ecco qualche codice dal libro di Hadley che presuppone che si sia creato ggplot oggetti a, b, c. Mette un nella riga superiore, con b e c nella fila inferiore.
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))