Lubridatatate month() 多年

Lubridatate month() for multiple years

我想绘制 2019 年和 2020 年的情节,但我 运行 遇到了来自 lubridate 的 month() 函数的问题。 如果我 运行 这个:

df  %>%
  mutate (Month = month(Date, label=T)) %>%
  group_by(Month, Var1) %>%
  summarize (sum = sum(numeric_variable)) %>%
ggplot(aes(Month, sum)) +
  geom_col() +
 facet_wrap(. ~ Var1, scales ="free_y")

图中合并了 2019 年和 2020 年 1 月以及其他月份的数据,这是有道理的,因为它们在 2019 年和 2020 年的月份变量中都被标记为 'Jan'

如何才能最好地将 2019 年和 2020 年的月份分开,同时仍保留标签 ('janb, 'feb') 和我的月份变量的顺序?我必须手动将它们作为一个因素重新排序还是有更好的方法?

Lubridate 在某些方面很不错,但我更喜欢 zoo::as.yearmon 好几个月好几年。 ggplot:

甚至还有一个不错的 scale_x_yearmon 函数
library(zoo)
df %>%
  mutate (Month = zoo::as.yearmon(Date)) %>%
  group_by(Month, Var1) %>%
  summarize (sum = sum(numeric_variable)) %>%
ggplot(aes(Month, sum)) +
  geom_col() +
  facet_wrap(. ~ Var1, scales ="free_y") + 
  zoo::scale_x_yearmon(format = "%b")

示例数据:

set.seed(123)
df <- data.frame(Date = rep(seq(as.Date("2019-01-01"),as.Date("2020-12-31"), by = "day"),2),
                                Var1 = rep(LETTERS[1:2],each = 731),
                                numeric_variable = round(runif(2*731,1,100)))

谢谢伊恩,你让我走上了正确的道路。 scale_x_yearmon 虽然对我不起作用。但是因为顺序是正确的,所以我可以将动物园的 yearmon 的结果转换为一个因素并从那里开始工作。

df %>% 
mutate (Month = as.factor(zoo::as.yearmon(Date))) %>% 
group_by(Month, Var1) %>% 
ggplot(aes(Month, numeric_variable)) +
  geom_col() +  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

我知道在 x 轴上有一个 'jan 2019'/ 'dec 2019' 和 'jan 2020' / 'dec 2020' 现在已经足够好了。问题已解决。