Eliminazione dei livelli non utilizzati nelle sfaccettature con ggplot2 [chiuso]


19

È possibile eliminare livelli non utilizzati nelle sfaccettature di ggplot2s? Questo è il mio codice:

tab = as.data.frame(cbind(groups = mtcars$cyl, names = row.names(mtcars), val = mtcars$mpg, N = mtcars$disp))
tab$N = as.numeric(tab$N)

ggplot(tab, aes(names,val)) + 
geom_point() + coord_flip() + 
theme_bw() + 
facet_grid(groups ~ ., drop=TRUE)#, scales="free", as.table=F, space="free")

Ho provato l' drop=Tinterruttore ma non aiuta. Che cosa sto facendo di sbagliato?


Per domande di programmazione pura (non statistiche) come questa, si prega di migrare su StackOverflow
smci

Risposte:


27

I tuoi dati di esempio non hanno livelli inutilizzati da eliminare. Verifica il comportamento in questo esempio:

dat <- data.frame(x = runif(12),
                  y = runif(12),
                  grp1 = factor(rep(letters[1:4],times = 3)),
                  grp2 = factor(rep(LETTERS[1:2],times = 6)))

levels(dat$grp2) <- LETTERS[1:3]

ggplot(dat,aes(x = x,y = y)) + 
    facet_grid(grp1~grp2,drop = FALSE) + 
    geom_point()

ggplot(dat,aes(x = x,y = y)) + 
    facet_grid(grp1~grp2,drop = TRUE) + 
    geom_point()

È possibile che tu stia cercando di cambiare i fattori che tracciano sull'asse verticale in ogni aspetto, nel qual caso desideri impostare l' scalesargomento e utilizzare facet_wrap:

ggplot(tab, aes(names,val)) + 
    geom_point() + coord_flip() + 
    theme_bw() + 
    facet_wrap(~groups,nrow = 3,scales = "free_x")

Oh, vedo ora cosa fa. La mia intenzione era quella di tracciare solo quei livelli in ogni aspetto, che sono effettivamente raggruppati per aspetto. Come, ad esempio usando la mia scheda, dotchart(as.numeric(tab$val), labels=tab$names, groups=tab$groups). È possibile?
mrrrau,

@mrrrau Sì, vedi la mia modifica.
joran

21
Per i lettori futuri, dropabbassa tutti i livelli di fattore che non sono stati utilizzati in nessun aspetto della trama, mentre scalesabbassa qualsiasi livello di fattore che non è stato utilizzato in un aspetto particolare della trama. Questo mi ha richiesto del tempo per capire da questo post, quindi ho pensato di chiarire qui per salvare qualcun altro il problema.
Jake Fisher,

@JakeFisher Grazie per averlo segnalato! Abbastanza utile!
Steven,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.