存在 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
我正在创建一个箱形图,其中我在调整 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