我试图使用geom_line()用ggplot2绘制一个分组数据帧的分面图。我的数据框有一个日期列,我想在水平轴上显示日期。如果我只在aes中使用Date(x=Date,…),我会在水平轴上得到很好的标签。然而,这条线有一个几乎水平的部分,日期从一组的末尾跳到下一组的开头。此代码和图表显示:
dts <- seq.Date(as.Date("2020-01-01"), as.Date("2021-12-31"), by="day")
mos <- sapply(dts, month)
df <- data.frame(Date=dts, Month=mos)
nr <- nrow(df)
df$X <- rep(1, nr)
df %>%
group_by(Month) -> dfgrp
dfgrp %>%
group_by(Month) %>%
mutate(Time = Date[1:n()],
Z = cumsum(X)) %>%
ggplot(aes(x=Date, y=Z)) +
geom_line(color="darkgreen", size=0.5) +
facet_grid(. ~ Month, scale="free_x") +
theme(axis.text.x = element_text(angle=45, size=7))
我不希望我的图表在日期大幅变化时出现那些几乎水平的线条。我能够使用aes()上的整数生成一个没有这些行的图表,如下所示:
dfgrp %>%
mutate(Time = 1:n() %>% as.integer(),
Z = cumsum(X)) %>%
ggplot(aes(x=Time, y=Z)) +
geom_line(color="darkgreen", size=0.5) +
facet_grid(. ~ Month, scale="free_x") +
scale_x_continuous(breaks = seq(from=1, to=nr, by=10) %>% as.integer(),
labels = function(x) as.character(dfgrp$Date[x])) +
theme(axis.text.x = element_text(angle=45, size=7))
图表上的线条看起来像我想要的,但横轴上的日期不正确:它们在每个方面都在2020年2月结束,而数据框中的日期在2021年12月结束,第一张图表中的日期从不同方面的不同月份开始和结束。
我尝试了很多方法,但都没有奏效。对于如何制作一个日期如上图第一张所示、线条如上图第二张所示的图表,您有什么建议吗?
我们将非常感谢您的帮助。