【问题标题】:ggplot: scale date monthly from Jan:Dec not Jan:Jan or Feb:Janggplot:从一月:十二月而不是一月:一月或二月:一月每月缩放日期
【发布时间】:2021-09-23 21:01:42
【问题描述】:

我有 as.Date()(每日)数据,我用每月标签绘制,但我不知道如何强制它“很好地”格式化:

1:默认,在顶部包含额外的终端Jan,没有数据标签。

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

2:使用扩展会删除额外的空格(好)并删除 Jan 标签(好),但它会删除第一个而不是最后一个(坏)。

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

有谁知道如何解决这个问题?我认为解决方案在 date_labelslabels... 或 limits 内?

【问题讨论】:

  • 如果您包含一个简单的reproducible example 以及可用于测试和验证可能的解决方案的示例输入,则更容易为您提供帮助。

标签: r date ggplot2 scale


【解决方案1】:

原来是在limits,但现在我对我设置的限制与默认设置有何不同感到困惑。做了一些挖掘。我的 y 数据是:

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

这个range()

“2018-01-02”“2019-01-02”

我的“Day”变量的range()

1 366

显然 R/ggplot 是从 0 开始计算年份。如果我减去 1:

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

最大值现在是“2019-01-01”,因此添加了重复的一月,可能是由于闰年天数增加到 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"))) +

令人惊讶的烦人,但希望这可以帮助其他遇到此问题的人。

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 2021-05-27
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多