考虑这个例子。我想通过将两列连接成一个字符串来为我的面板创建一个自定义标签。
通过 faceting 创建的面板按字母顺序排列,但实际上,我希望它们按 排序src
,所以 SRC01 应该先出现,然后是 SRC02,依此类推。
library(tidyverse)
tibble::tibble(
src = rep(c("SRC03", "SRC04", "SRC01", "SRC02"), 2),
data = runif(8)
) %>%
mutate(
foo = case_when(src %in% c("SRC01", "SRC02") ~ "foo", TRUE ~ "bar"),
label = paste(foo, src)
) %>%
ggplot(aes(x = data)) +
geom_density() +
facet_wrap(~label)
由reprex 包(v0.3.0)于 2019-05-22 创建
我知道这个顺序取决于潜在因素水平的顺序,但是这个问题显示了如何手动指定我不想要的水平(还有更多的SRC
值,我不想输入所有这些......)。
我找到了一个解决方案fct_reorder
,我可以在其中指定:
mutate(label = fct_reorder(label, src, .fun = identity))
但这仅在每个src/label
组合有一行时才有效。如果我添加数据(即,每个组合不止一个数据点),它会失败并显示:
Error: `fun` must return a single value per group
实现我需要的最简洁的方法是什么?