使用x轴上的最后一个值的GGplot订单图例

时间:2019-02-05 13:59:24

标签: r ggplot2 dplyr

我有一些使用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()

which should happen soon

## does not work

df %>%
  mutate(variable = fct_reorder(variable, case_when(mean ~ year == 2010)))
  ggplot(aes(year, mean, color = variable)) +
  geom_line()

2 个答案:

答案 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进行重新排序。

enter image description here

答案 1 :(得分:0)

另一种方法是不使用fct_reorder2()添加新列:

library(tidyverse)

df %>%
  ggplot(aes(year, mean, color = fct_reorder2(variable, year, mean))) +
  geom_line() +
  labs(color = "variable") 

enter image description here

尽管不建议您这样做,但可以根据绘图中的第一个(最早)值对图例进行排序

df %>%
  ggplot(aes(year, mean, color = fct_reorder2(variable, year, mean, .fun = first2))) +
  geom_line() +
  labs(color = "variable") 

enter image description here

默认值为.fun = last2(另请参见https://forcats.tidyverse.org/reference/fct_reorder.html