Je crée un graphique à barres esquivé en utilisant ggplot avec une échelle x discrète, l'axe des x est maintenant organisé par ordre alphabétique, mais je dois le réorganiser de sorte qu'il soit ordonné par la valeur de l'axe y (c'est-à-dire que la barre la plus haute sera être positionné à gauche).
J'ai essayé de trier ou de trier, mais j'ai réussi à trier l'axe des x, mais pas les barres respectivement.
Qu'est ce que j'ai mal fait?
factor
etreorder
modifie les caractéristiques des données, bien que dans le cadre de l'ggplot()
appel, et cela fait plus qu'il n'en faut pour le problème en question.scale_x_discrete(limits = DT$x[order(-DT$y)])+
Vous pouvez utiliser
reorder
:Éditer:
Pour avoir la barre la plus haute à gauche, vous devez utiliser un peu de kludge:
Je m'attendrais à ce que cela ait également des hauteurs négatives, mais ce n'est pas le cas, donc cela fonctionne!
la source
Hadley a développé un package appelé
forcats
. Ce package rend la tâche beaucoup plus facile. Vous pouvez l'exploiterfct_infreq()
lorsque vous souhaitez modifier l'ordre de l'axe des x par la fréquence d'un facteur. Dans le cas de l'mtcars
exemple de cet article, vous souhaitez réorganiser les niveaux decyl
par la fréquence de chaque niveau. Le niveau qui apparaît le plus fréquemment reste sur le côté gauche. Tout ce dont vous avez besoin est lefct_infreq()
.Si vous voulez faire l'inverse, vous pouvez utiliser
fct_rev()
avecfct_infreq()
.la source
Je me rends compte que c'est vieux, mais peut-être que cette fonction que j'ai créée est utile à quelqu'un là-bas:
Maintenant, avec cette fonction, vous pouvez tracer de manière interactive avec ggplot2, comme ceci:
Comme on peut le voir, la
order_axis
fonction crée une autre dataframe avec une nouvelle colonne nommée de la même manière mais avec un_o
à la fin. Cette nouvelle colonne a des niveaux dans l'ordre croissant, donc ggplot2 trace automatiquement dans cet ordre.Ceci est quelque peu limité (ne fonctionne que pour les combinaisons de caractères ou de facteurs et numériques de colonnes et dans l'ordre croissant) mais je le trouve toujours très utile pour le traçage en déplacement.
la source
reorder
directe. Ne fait-il pasggplot(df, aes(x = reorder(AXIS_X, COLUMN_Y), y = COLUMN_Y)) + ...
la même chose, à peu près aussi concis, et sans la fonction d'aide?