Cambia l'ordine di una scala x discreta



Answers

Il modo migliore per me era usare il vettore con le categorie in modo da avere bisogno come parametro dei limits su scale_x_discrete . Penso che sia una soluzione piuttosto semplice e diretta.

ggplot(mtcars, aes(factor(cyl))) + 
geom_bar() + 
scale_x_discrete(limits=c(8,4,6))

Question

Sto facendo un grafico a barre schermato usando ggplot con scala x discreta, l'asse x ora è disposto in ordine alfabetico, ma ho bisogno di riorganizzarlo in modo che sia ordinato dal valore dell'asse y (cioè, la barra più alta sarà essere posizionato a sinistra).

Ho provato l'ordine o l'ordinamento, ma il risultato è di ordinare l'asse x, ma non le barre, rispettivamente.

Cosa ho fatto di sbagliato?




Hadley ha sviluppato un pacchetto chiamato forcats . Questo pacchetto rende l'attività molto più semplice. È possibile sfruttare fct_infreq() quando si desidera modificare l'ordine dell'asse x in base alla frequenza di un fattore. Nel caso dell'esempio di mtcars in questo post, si desidera riordinare i livelli di cyl base alla frequenza di ciascun livello. Il livello che appare più frequentemente rimane sul lato sinistro. Tutto ciò di cui hai bisogno è fct_infreq() .

library(ggplot2)
library(forcats)

ggplot(mtcars, aes(fct_infreq(factor(cyl)))) +
geom_bar() +
labs(x = "cyl")

Se vuoi fare il contrario, puoi usare fct_rev() insieme a fct_infreq() .

ggplot(mtcars, aes(fct_rev(fct_infreq(factor(cyl))))) +
geom_bar() +
labs(x = "cyl")