fct_reorder is useful for 1d displays where the factor is mapped to position; fct_reorder2 for 2d displays where the factor is mapped to a non-position aesthetic.

fct_reorder(f, x, fun = median, ..., .desc = FALSE)

fct_reorder2(f, x, y, fun = last2, ..., .desc = TRUE)



A factor

x, y

The levels of f are reordered so that the values of fun(x) (for fct_reorder()) and fun(x, y) (for fct_reorder2()) are in ascending order.


An summary function. It should take one vector for fct_reorder, and two vectors for fct_reorder2.


Other arguments passed on to fun. A common argument is na.rm = TRUE.


Order in descending order? Note the default is different between fct_reorder and fct_reorder2, in order to match the default ordering of factors in the legend.


boxplot(Sepal.Width ~ Species, data = iris)
boxplot(Sepal.Width ~ fct_reorder(Species, Sepal.Width), data = iris)
boxplot(Sepal.Width ~ fct_reorder(Species, Sepal.Width, .desc = TRUE), data = iris)
chks <- subset(ChickWeight, as.integer(Chick) < 10) chks <- transform(chks, Chick = fct_shuffle(Chick)) if (require("ggplot2")) { ggplot(chks, aes(Time, weight, colour = Chick)) + geom_point() + geom_line() # Note that lines match order in legend ggplot(chks, aes(Time, weight, colour = fct_reorder2(Chick, Time, weight))) + geom_point() + geom_line() + labs(colour = "Chick") }