Estoy haciendo un gráfico de barras esquivadas usando ggplot con una escala x discreta, el eje x ahora está organizado en orden alfabético, pero necesito reorganizarlo para que esté ordenado por el valor del eje y (es decir, la barra más alta posicionarse a la izquierda).
Intenté ordenar u ordenar, pero resultó en ordenar el eje x, pero no las barras respectivamente.
¿Qué he hecho mal?
factor
y losreorder
cambios de las características de los datos, aunque dentro de laggplot()
llamada, hacen más de lo necesario para el problema en cuestión.scale_x_discrete(limits = DT$x[order(-DT$y)])+
Puedes usar
reorder
:Editar:
Para tener la barra más alta a la izquierda, debes usar un poco de kludge:
Esperaría que esto también tenga alturas negativas, pero no lo tiene, ¡así que funciona!
fuente
Hadley ha estado desarrollando un paquete llamado
forcats
. Este paquete hace la tarea mucho más fácil. Puede explotarfct_infreq()
cuando desee cambiar el orden del eje x por la frecuencia de un factor. En el caso delmtcars
ejemplo en esta publicación, desea reordenar los nivelescyl
por la frecuencia de cada nivel. El nivel que aparece con mayor frecuencia permanece en el lado izquierdo. Todo lo que necesitas es elfct_infreq()
.Si quieres ir al revés, puedes usarlo
fct_rev()
junto confct_infreq()
.fuente
Me doy cuenta de que esto es antiguo, pero tal vez esta función que creé es útil para alguien por ahí:
Ahora, con esta función, puede trazar interactivamente con ggplot2, así:
Como se puede ver, la
order_axis
función crea otro marco de datos con una nueva columna llamada igual pero con un_o
al final. Esta nueva columna tiene niveles en orden ascendente, por lo que ggplot2 traza automáticamente en ese orden.Esto es algo limitado (solo funciona para caracteres o factores y combinaciones numéricas de columnas y en orden ascendente) pero aún lo encuentro muy útil para trazar sobre la marcha.
fuente
reorder
directamente. ¿Noggplot(df, aes(x = reorder(AXIS_X, COLUMN_Y), y = COLUMN_Y)) + ...
hace lo mismo, de manera concisa, y sin la función auxiliar?