我有一些使用ggplot
绘制的时间序列数据。我希望图例出现在图的右侧,该图例与图的x轴上最新日期/值上的线的顺序相同。我尝试使用case_when
函数,但显然使用错误。这是一个例子。
df <- tibble(
x = runif(100),
y = runif(100),
z = runif(100),
year = sample(seq(1900, 2010, 10), 100, T)
) %>%
gather(variable, value,-year) %>%
group_by(year, variable) %>%
summarise(mean = mean(value))
df %>%
ggplot(aes(year, mean, color = variable)) +
geom_line()
## does not work
df %>%
mutate(variable = fct_reorder(variable, case_when(mean ~ year == 2010)))
ggplot(aes(year, mean, color = variable)) +
geom_line()
答案 0 :(得分:1)
我们可能会再增加一行
ungroup() %>% mutate(variable = fct_reorder(variable, mean, tail, n = 1, .desc = TRUE))
在绘制之前或使用
df %>%
mutate(variable = fct_reorder(variable, mean, tail, n = 1, .desc = TRUE)) %>%
ggplot(aes(year, mean, color = variable)) +
geom_line()
通过这种方式,我们查看mean
的最后一个值,并相应地对variable
进行重新排序。
答案 1 :(得分:0)
另一种方法是不使用fct_reorder2()
添加新列:
library(tidyverse)
df %>%
ggplot(aes(year, mean, color = fct_reorder2(variable, year, mean))) +
geom_line() +
labs(color = "variable")
尽管不建议您这样做,但可以根据绘图中的第一个(最早)值对图例进行排序
df %>%
ggplot(aes(year, mean, color = fct_reorder2(variable, year, mean, .fun = first2))) +
geom_line() +
labs(color = "variable")
默认值为.fun = last2
(另请参见https://forcats.tidyverse.org/reference/fct_reorder.html)