代码之家  ›  专栏  ›  技术社区  ›  dez93_2000

ggplot:从1月:12月到1月:1月或2月:1月

  •  0
  • dez93_2000  · 技术社区  · 4 年前

    我也有。Date()(daily)数据,我正在用月度标签绘制这些数据,但我不知道如何强制它“精确”地格式化:

    1:默认值,包括顶部的附加端子Jan,该端子不标记任何数据。

    scale_y_date(date_breaks = "1 month", date_labels = "%b") +

    default

    2:使用expand会删除额外的空白(好)和Jan标签(好),但会删除第一个而不是最后一个(坏)。

    scale_y_date(date_breaks = "1 month", date_labels = "%b", expand = c(0, 0)) +
    

    expand

    有人知道怎么解决这个问题吗?我认为解决方案是可行的 date_labels labels ... 或 limits ?

    1 回复  |  直到 4 年前
        1
  •  0
  •   dez93_2000    4 年前

    原来是在 limits ,但我现在很困惑,我设定的限制与默认值有何不同。做了一些挖掘。我的数据如下:

    y = as.Date(Day, origin = as.Date("2018-01-01"))
    

    这个 range() 其中之一就是

    "2018-01-02" "2019-01-02"

    这个 范围() 我的“Day”变量的

    1 366

    所以很明显,R/ggplot是从0开始计算年天数。如果我减去1:

    y = as.Date(Day - 1, origin = as.Date("2018-01-01"))
    

    最大值现在是“2019-01-01”,因此增加了重复的1月,可能是因为闰年天数增加到366天。这可以通过在整个系列中减去1并使用(例如)在数据中解决 case_when 要将365s转换为364s,或在ggplot中:

    scale_y_date(date_breaks = "1 month", date_labels = "%b", expand = c(0, 0), limits = c(as.Date("2018-01-01"), as.Date("2018-12-31"))) +
    

    令人惊讶的恼人,但希望这能帮助其他人解决这个问题。

    working

    推荐文章