【问题标题】:R ggplot: major gridlines / quarter label misplacedR ggplot:主要网格线/四分之一标签放错了位置
【发布时间】:2022-01-24 09:55:34
【问题描述】:

我正在尝试绘制时间序列变量的 geom_smooth。这是从 2019 年 1 月 1 日开始的每日数据。我想让主要的网格线和横轴显示该季度。但它最终贴上了 2019 年第一季度的标签和本季度的END,我想在该季度的开始

这是我的代码:

ggplot(data = stackoverflow, aes(x=Date , y=Value, col=MyName)) +
  geom_smooth(method = "loess", span = 0.5, se=FALSE, size=2) +
  scale_x_date(date_breaks = "3 months", minor_breaks = "1 month", labels = function(x) zoo::format.yearqtr(x, "%Y-Q%q")) +
  coord_cartesian(ylim = c(-0.03,0.03)) +
  geom_point(aes(Date, Value)) +
  xlab("Quarter") +
  theme(panel.grid.major = element_line(colour="white", size=1.5))

(我添加了 geom_point 来显示各个数据点,但它们不会在我的最终图表演示中使用。)

结果如下:

如您所见,数据似乎始于 2019 年第一季度之前,但我确实有 2019 年 1 月 1 日以后的数据。而且数据似乎在2022-Q1之前结束,但我确实有数据包括2021年12月,甚至2022年1月的几个点。

有什么方法可以让主要网格线和刻度标签出现在季度的BEGINNING?我尝试将日期添加 30 天,但随后它在第一个主要网格线上显示 2019-Q2,我真的很喜欢 2019-Q1 作为第一个刻度标签。

【问题讨论】:

    标签: r date ggplot2


    【解决方案1】:

    如果date_breaks 参数不能满足您的需求,请改用breaks 参数。只需将要用于主要休息时间的日期向量传递给它。使用seq创建一个很容易

    my_breaks <- seq(from = as.Date("2019-01-01"), to = as.Date("2022-01-01"), by = "3 months")
    
    ggplot(data = stackoverflow, aes(x = Date , y = Value, col = MyName)) +
      geom_smooth(formula = y ~ x, method = "loess", span = 0.5, se = FALSE, size = 2) +
      geom_point() +
      scale_x_date(breaks = my_breaks, minor_breaks = "1 month", 
                   labels = function(x) zoo::format.yearqtr(x, "%Y-Q%q")) +
      scale_color_manual(values = "#06aee7") +
      xlab("Quarter") +
      coord_cartesian(ylim = c(-0.03, 0.03)) +
      theme(panel.grid.major = element_line(colour = "white", size = 1.5))
    


    使用的数据

    set.seed(1)
    stackoverflow <- data.frame(Date = seq(as.Date("2019-01-01"), 
                                           as.Date("2022-01-10"), 
                                           by = "1 day"),
                                Value = rnorm(1106)/40,
                                MyName = "series name")
    

    【讨论】:

    • 效果很好,谢谢!当新数据到达时,它并不完全灵活,但这不会经常发生。如果确实如此,则始终可以使 my_breaks 依赖于数据集中的日期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2023-04-05
    • 2023-03-13
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多