Non credo che posso davvero soddisfare la vostra "senza fare una nuova cornice di dati" requisito, ma è possibile creare il nuovo telaio dati al volo:
ggplot(transform(iris,
Species=factor(Species,levels=c("virginica","setosa","versicolor")))) +
geom_histogram(aes(Petal.Width))+ facet_grid(Species~.)
Sono d'accordo che sarebbe stato bello se ci fosse un altro modo per controllare questo, ma è già un ggplot
piuttosto potente (e complicato) motore ...
Nota che l'ordine di (1) le righe nei set di dati è indipendente dall'ordine di (2) i livelli del fattore. # 2 è ciò che cambia factor(...,levels=...)
e che cosa ggplot
esamina per determinare l'ordine delle faccette. Fare # 1 (ordinare le righe del frame di dati in un ordine specificato) è una sfida interessante. Penso che mi sarebbe effettivamente raggiungere questo obiettivo facendo # 2 prima, e quindi utilizzando order()
o arrange()
per ordinare in base ai valori numerici del fattore:
neworder <- c("virginica","setosa","versicolor")
library(plyr) ## or dplyr (transform -> mutate)
iris2 <- arrange(transform(iris,
Species=factor(Species,levels=neworder)),Species)
Non riesco a vedere immediatamente un modo rapido per fare questo senza cambiando l'ordine dei livelli di fattore (è possibile farlo e quindi ripristinare di conseguenza l'ordine dei livelli di fattore).
In generale, le funzioni in R che dipendono dall'ordine dei livelli di una variabile categoriale sono basate sull'ordine a livello di fattore, non sull'ordine delle righe nel set di dati: la risposta sopra si applica in generale.
fonte
2013-02-27 15:50:53
forse 'facet_grid (factor (Species, levels = c (" virginica "," setosa "," versicolor ")) ~.)'? [oops, non funziona] –
Come osserva Ben, il modo di controllare l'ordinamento di praticamente tutto in ggplot (barre in grafici a barre, sfaccettature, ecc.) consiste nell'utilizzare un fattore e regolare l'ordine dei livelli. – joran
... o questo: http://stackoverflow.com/q/3311901/324364 – joran