Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

reorder_within

Reorder an x or y axis within facets


Description

Reorder a column before plotting with faceting, such that the values are ordered within each facet. This requires two functions: reorder_within applied to the column, then either scale_x_reordered or scale_y_reordered added to the plot. This is implemented as a bit of a hack: it appends ___ and then the facet at the end of each string.

Usage

reorder_within(x, by, within, fun = mean, sep = "___", ...)

scale_x_reordered(..., sep = "___")

scale_y_reordered(..., sep = "___")

Arguments

x

Vector to reorder.

by

Vector of the same length, to use for reordering.

within

Vector or list of vectors of the same length that will later be used for faceting. A list of vectors will be used to facet within multiple variables.

fun

Function to perform within each subset to determine the resulting ordering. By default, mean.

sep

Separator to distinguish the two. You may want to set this manually if ___ can exist within one of your labels.

...

In reorder_within arguments passed on to reorder. In the scale functions, extra arguments passed on to scale_x_discrete or scale_y_discrete.

Source

"Ordering categories within ggplot2 Facets" by Tyler Rinker: https://trinkerrstuff.wordpress.com/2016/12/23/ordering-categories-within-ggplot2-facets/

Examples

library(tidyr)
library(ggplot2)

iris_gathered <- gather(iris, metric, value, -Species)

# reordering doesn't work within each facet (see Sepal.Width):
ggplot(iris_gathered, aes(reorder(Species, value), value)) +
  geom_boxplot() +
  facet_wrap(~ metric)

# reorder_within and scale_x_reordered work.
# (Note that you need to set scales = "free_x" in the facet)
ggplot(iris_gathered, aes(reorder_within(Species, value, metric), value)) +
  geom_boxplot() +
  scale_x_reordered() +
  facet_wrap(~ metric, scales = "free_x")

# to reorder within multiple variables, set within to the list of
# facet variables.
ggplot(mtcars, aes(reorder_within(carb, mpg, list(vs, am)), mpg)) +
  geom_boxplot() +
  scale_x_reordered() +
  facet_wrap(vs ~ am, scales = "free_x")

tidytext

Text Mining using 'dplyr', 'ggplot2', and Other Tidy Tools

v0.3.1
MIT + file LICENSE
Authors
Gabriela De Queiroz [ctb], Colin Fay [ctb] (<https://orcid.org/0000-0001-7343-1846>), Emil Hvitfeldt [ctb], Os Keyes [ctb] (<https://orcid.org/0000-0001-5196-609X>), Kanishka Misra [ctb], Tim Mastny [ctb], Jeff Erickson [ctb], David Robinson [aut], Julia Silge [aut, cre] (<https://orcid.org/0000-0002-3671-836X>)
Initial release

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.