153 votes

Trier l'échelle x discrète par fréquence/valeur

Je fais un graphique à barres esquivées en utilisant ggplot avec échelle x discrète, les axes x sont maintenant disposés dans l'ordre alphabétique, mais je dois le réarranger afin qu'il soit ordonné par la valeur de l'axe y (c.-à-d., la barre la plus haute sera positionnée sur la gauche).

J'ai essayé d'ordonner ou de trier, mais j'ai réussi à trier l'axe des abscisses, mais pas les barres respectivement.

Qu'ai-je fait de mal ?

212voto

Yuriy Petrovskiy Points 1362

La meilleure façon pour moi était d'utiliser le vecteur avec des catégories dans l'ordre dont j'ai besoin comme paramètre limits scale_x_discrete. Je pense que c'est une solution assez simple et directe.

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

enter image description here

44voto

James Points 24725

Vous pouvez utiliser reorder :

qplot(reorder(factor(cyl),factor(cyl),length),data=mtcars,geom="bar")

Modifier :

Pour avoir la barre la plus haute à gauche, il faut utiliser un peu de kludge :

qplot(reorder(factor(cyl),factor(cyl),function(x) length(x)*-1),
   data=mtcars,geom="bar")

Je m'attendrais à ce que ça ait aussi des hauteurs négatives, mais ça ne marche pas, donc ça marche !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X