ggplot2: cambia el orden de visualización de una variable de factor en un eje

Cuando uso geom_tile() con ggplot2 y escalas discretas, las tags están en orden ascendente en el eje x y en orden descendente en el eje y:

 #some sample data a <- runif(400) a <- matrix(a, ncol=20) colnames(a) <- letters[seq( from = 1, to = 20 )] rownames(a) <- letters[seq( from = 1, to = 20 )] a <- melt(a) 

Cuando trazo el dataframe, aparece esto:

 ggplot(a, aes(X1, X2, fill = value)) + geom_tile() + scale_fill_gradient(low = "white", high = "black", breaks=seq(from=0, to=1, by=.1), name="value") + opts(axis.text.x=theme_text(angle=-90, hjust=0)) + scale_x_discrete(name="") + scale_y_discrete(name="") 

y los coords están etiquetados de manera diferente para xey:

enter image description here

Me gustaría tener las tags ordenadas desde az de arriba a abajo y de izquierda a derecha. ¿hay una manera rápida de hacer esto?

El punto importante aquí es el orden de los niveles de los factores. El orden en los niveles también es el orden en la ttwig. Puede usar rev para invertir el orden de los niveles de esta manera (tenga en cuenta que simplemente reordeno una columna en un data.frame):

 df$X1 = with(df, factor(X1, levels = rev(levels(X1)))) 

Use esta syntax para reordenar sus factores según sea necesario.

Para los casos en los que prefiera no modificar el orden del factor en los datos subyacentes, puede obtener el mismo resultado usando el argumento de los limits para scale_y_discrete :

 ggplot(a, aes(X1, X2, fill = value)) + geom_tile() + scale_y_discrete(name="", limits = rev(levels(a$X2))) 

Dando esta salida:

enter image description here