如何使用ggplot2按图中生成的斜率对小平面进行排序?我的印象是,after_stat(slope)
应该做的工作,但它似乎没有效果,因为下面的截图显示,负斜率显然不是最后一个情节的小面.
library(tidyverse)
set.seed(123)
n <- 100
data_filtered <- data.frame(
start_date = rep(seq(as.Date("2022-01-01"), by = "days", length.out = n), each = 5),
value = rnorm(n * 5, mean = 10, sd = 3),
id = rep(letters[1:5], each = n)
)
data_filtered$slope <- ifelse(data_filtered$id == "a", 0.5, -0.5)
data_filtered$value <- data_filtered$value + data_filtered$slope * as.numeric(data_filtered$start_date) / 100
slope <- coef(lm(value ~ as.numeric(start_date), data = data_filtered))[2]
data_filtered %>%
ggplot(aes(x = start_date, y = value)) +
geom_line() +
geom_smooth(method = "lm", se = FALSE) +
facet_wrap(~fct_reorder(id, after_stat(slope), .desc = TRUE), scales = "free_y") +
theme_minimal() +
theme(strip.text.x = element_text(hjust = 1),
strip.background = element_blank(),
strip.placement = "outside",
legend.position = "bottom") +
theme(panel.spacing = unit(1, "lines"))
值得一提的是,我也try 了单独计算斜率,并使用fct_reorder
重新排序,但没有成功.
fct_reorder(data_filtered, factor(id), slope, na.rm = TRUE, .desc = TRUE)