Ho esaminato due soluzioni.
1)
ggplot(data = d, aes(x, y)) +
geom_point() +
facet_grid(z~.,scales="free_x")
funziona, ma dà lo stesso risultato senza la parte scales="free"
.
2)
library(gridExtra)
p1 <- ggplot(data = d[d$z==1,], aes(x, y)) + geom_point()
p2 <- ggplot(data = d[d$z==2,], aes(x, y)) + geom_point()
p3 <- ggplot(data = d[d$z==3,], aes(x, y)) + geom_point()
p4 <- ggplot(data = d[d$z==4,], aes(x, y)) + geom_point()
p5 <- ggplot(data = d[d$z==5,], aes(x, y)) + geom_point()
grid.arrange(p1,p2,p3,p4,p5,ncol=1)
questo non funziona. Quando si stampano separatamente i grafici, scoprirai che non è possibile tracciare il grafico p5
. Ciò è dovuto al fatto che per z=5
ha solo NA.
Provare a utilizzare una scala libera quando ci sono solo NA non è molto logico. A mio parere è un problema concettuale . La ragione di ciò è che senza utilizzare l'argomento scales="free"
, vengono utilizzate le scale dell'altra sottotrama. Quando si utilizza l'argomento scales="free"
(o free_x
o free_y
), le scale di ciascuna sottotrama verranno impostate in base alla lunghezza della scala. Quando ci sono solo NA, non è possibile determinare la lunghezza della scala che a sua volta causa il messaggio di errore.
Questo è il motivo per cui free_x
funziona (anche se fornisce lo stesso risultato).
Per concludere: quando uno dei tuoi gruppi ha solo NA, non è possibile utilizzare scales="free"
nella trama. Di conseguenza, si hanno due opzioni (a mio parere):
- omettendo l'argomento
scales="free"
per ottenere il vostro sottotrame vuoti desiderati.
- Sostituzione di NA con
0
, ma questa è solo una soluzione quando non si dispone di valori negativi.
Forzare 'y' per essere un fattore di aiuto, ma probabilmente ha anche alcune conseguenze indesiderabili. – joran
In questo esempio forse. Ma il mio asse y è in percentuale. – JT85
In tal caso, dovrei semplicemente eliminare le righe con i valori mancanti dal frame dati stesso e quindi tracciare. – joran