首页 > 解决方案 > R:如何正确抵消 ggplot2 中每日数据的年季标签?

问题描述

我正在尝试使用 yearquarter 标签而不是原始日期制作一个简单的图,以显示值的发展如何随着季度的变化而变化。但是,当尝试格式化 YQ 标签时,它们似乎有一些偏移,因为它们没有正确启动。看代码和图

library(tidyverse)
library(zoo)

(df_Example <- tibble(Date = seq(as.Date("2019-01-01"), as.Date("2020-12-31"), by = "day"),
                     Value = 1))
#> # A tibble: 731 x 2
#>    Date       Value
#>    <date>     <dbl>
#>  1 2019-01-01     1
#>  2 2019-01-02     1
#>  3 2019-01-03     1
#>  4 2019-01-04     1
#>  5 2019-01-05     1
#>  6 2019-01-06     1
#>  7 2019-01-07     1
#>  8 2019-01-08     1
#>  9 2019-01-09     1
#> 10 2019-01-10     1
#> # ... with 721 more rows

ggplot(data = df_Example, aes(x = Date, y = Value)) +
  geom_line() +
  scale_x_date(date_breaks = "3 months",
               labels = function(x) format.yearqtr(x, "%Y Q%q"))

在此处输入图像描述

如图所示,该行在标记开始之前开始。我非常希望这两者能够保持一致。

标签: rggplot2

解决方案


这是一个选项。

library(ggplot2)
library(zoo)      # as.yearqtr, as.POSIXct.yearqtr
qtr1 <- function(by) {
  function(x) {
    xqtr <- as.Date(as.POSIXct(as.yearqtr(x)))
    seq(xqtr[1], xqtr[2], by = by)
  }
}
ggplot(data = df_Example, aes(x = Date, y = Value)) +
  geom_line() +
  scale_x_date(breaks = qtr1("3 months"),
               labels = function(x) zoo::format.yearqtr(x, "%Y Q%q"))

具有更多控制器轴刻度的 ggplot2

笔记:


推荐阅读