To achieve your desired result I would suggest to recode your factor before applying reorder_within
.
The reason is that reorder_within
transforms the factor levels to make the reordering within facets work. Inside scale_x_reordered
a re-transformation is applied via the labels
argument to show the original levels or labels. That's why you can't make use of the labels
argument.
In the following example taken from the link you posted I make use of dplyr::recode(name, "Michael" = "Mike")
just before reorder_within
:
library(tidyverse)
library(babynames)
library(tidytext)
top_names <- babynames %>%
filter(year >= 1950,
year < 1990) %>%
mutate(decade = (year %/% 10) * 10) %>%
group_by(decade) %>%
count(name, wt = n, sort = TRUE) %>%
ungroup
top_names %>%
group_by(decade) %>%
top_n(15) %>%
ungroup %>%
mutate(decade = as.factor(decade),
name = recode(name, "Michael" = "Mike"),
name = reorder_within(name, n, decade)) %>%
ggplot(aes(name, n, fill = decade)) +
geom_col(show.legend = FALSE) +
facet_wrap(~decade, scales = "free_y") +
coord_flip() +
scale_x_reordered() +
scale_y_continuous(expand = c(0,0)) +
labs(y = "Number of babies per decade",
x = NULL,
title = "What were the most common baby names in each decade?",
subtitle = "Via US Social Security Administration")
#> Selecting by n

labels=c("old_label" = "new_label")
as an argument toscale_x_reordered
– Gregor Thomas