如何使用 Date 在一个图表中更改 x 轴间隔? (ggplot)

How to have changing x-axis intervals in one Graph using Date? (ggplot)

我正在尝试使用 ggplot 绘制时间序列。我汇总了过去几年的每月和每周数据。我希望我的情节显示五年的月度数据,直到某个截止日期。在此截止后,我想显示一年的每周数据。但是,我希望这两个部分的水平长度相同,以便可以更详细地查看每周数据。有没有办法手动缩放 x 轴,使其一半覆盖五年期,另一半覆盖相邻的一年期?

我已经尝试了很长一段时间的答案,如果有人知道如何解决这个问题,我将不胜感激。

如果没有可重现的示例很难判断,但听起来您的数据可能是这样的:

library(ggplot2)

set.seed(69)

df <- data.frame(dates = c(seq(as.POSIXct("2014-01-01"), 
                               as.POSIXct("2018-12-01"), by = "1 month"),
                           seq(as.POSIXct("2019-01-01"), by = "1 week",
                               length.out = 52)),
                 values = (cumsum(runif(112, -0.4, 0.6)) + 10) * 1000)

ggplot(df, aes(dates, values)) + geom_line()

如果您希望您的绘图分成两个面板,实现此目的的最简单方法是创建一个新列来表示您希望每行位于哪个面板中;

df$Period = as.factor(df$date > as.POSIXct("2019-01-01"))
levels(df$Period) <- c("Monthly (pre 2019)", "Weekly (2019")

现在你可以根据你的新因素用 facet_grid 绘图:

ggplot(df, aes(dates, values)) + 
  geom_line() + 
  facet_grid(.~Period, scales = "free_x")

reprex package (v0.3.0)

于 2020-07-15 创建