存在 scale_x_reordered() 时更改因子标签 ggplot

Change factor label ggplot when scale_x_reordered() is present

我正在创建一个箱形图,其中我在调整 x 轴上的因子顺序后使用了 scale_x_reordered()。

我现在正在尝试更改一个因素的标签。我以前一直在使用:

scale_x_discrete(标签=c("old_label" = "new_label"))

但是,我不能在同一个图中同时使用 scale_x_discrete() 和 scale_x_reordered()。有谁知道我可以更改标签并保留 scale_x_reordered 的修复方法?

我的 ggplot 基于这个非常有用的例子:linked here

我尝试进行的更改相当于手动将名称“Michael”更改为“Mike”。

为了达到您想要的结果,我建议在应用 reorder_within 之前重新编码您的因子。

原因是 reorder_within 变换了因子水平以使构面内的重新排序起作用。在 scale_x_reordered 内,通过 labels 参数应用重新转换以显示原始级别或标签。这就是为什么你不能使用 labels 参数。

在以下取自您发布的 link 的示例中,我在 reorder_within 之前使用了 dplyr::recode(name, "Michael" = "Mike")

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