ggplot facet基于值的不同Y轴顺序
ggplot facet different Y axis order based on value
我有一个分面图,其中我希望 Y 轴标签和相关值按每个分面值的降序显示(从而改变标签的顺序)。我所拥有的是这个,但是标签的顺序(以及相应的值)对于每个方面都是相同的。
ggplot(rf,
aes(x = revenues,
y = reorder(AgencyName, revenues))) +
geom_point(stat = "identity",
aes(color = AgencyName),
show.legend = FALSE) +
xlab(NULL) +
ylab(NULL) +
scale_x_continuous(label = scales::comma) +
facet_wrap(~year, ncol = 3, scales = "free_y") +
theme_minimal()
有人可以指出解决方案吗?
tidytext 包中的函数 reorder_within
和 scale_*_reordered
可能会派上用场。
reorder_within
将值重新编码为“VARIABLE___WITHIN”形式的字符串因子。该因子按每组 WITHIN 中的值排序。
scale_*_reordered
在绘制轴标签时删除了“___WITHIN”后缀。
在 facet_wrap
中添加 scales = "free_y"
以使其按预期工作。
这是生成数据的示例:
library(tidyverse)
# Generate data
df <- expand.grid(
year = 2019:2021,
group = paste("Group", toupper(letters[1:8]))
)
set.seed(123)
df$value <- rnorm(nrow(df), mean = 10, sd = 2)
df %>%
mutate(group = tidytext::reorder_within(group, value, within = year)) %>%
ggplot(aes(value, group)) +
geom_point() +
tidytext::scale_y_reordered() +
facet_wrap(vars(year), scales = "free_y")
我有一个分面图,其中我希望 Y 轴标签和相关值按每个分面值的降序显示(从而改变标签的顺序)。我所拥有的是这个,但是标签的顺序(以及相应的值)对于每个方面都是相同的。
ggplot(rf,
aes(x = revenues,
y = reorder(AgencyName, revenues))) +
geom_point(stat = "identity",
aes(color = AgencyName),
show.legend = FALSE) +
xlab(NULL) +
ylab(NULL) +
scale_x_continuous(label = scales::comma) +
facet_wrap(~year, ncol = 3, scales = "free_y") +
theme_minimal()
有人可以指出解决方案吗?
tidytext 包中的函数 reorder_within
和 scale_*_reordered
可能会派上用场。
reorder_within
将值重新编码为“VARIABLE___WITHIN”形式的字符串因子。该因子按每组 WITHIN 中的值排序。
scale_*_reordered
在绘制轴标签时删除了“___WITHIN”后缀。
在 facet_wrap
中添加 scales = "free_y"
以使其按预期工作。
这是生成数据的示例:
library(tidyverse)
# Generate data
df <- expand.grid(
year = 2019:2021,
group = paste("Group", toupper(letters[1:8]))
)
set.seed(123)
df$value <- rnorm(nrow(df), mean = 10, sd = 2)
df %>%
mutate(group = tidytext::reorder_within(group, value, within = year)) %>%
ggplot(aes(value, group)) +
geom_point() +
tidytext::scale_y_reordered() +
facet_wrap(vars(year), scales = "free_y")