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_withinscale_*_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")