ggplot - 根据日期的 x 轴(和开放式最后日期)

问题描述 投票:0回答:1

似乎有很多帖子您想在特定时间段内更改 ggplot 中的日期,如果您只想合并一些日期,这很容易 - 但是,我想:

  1. (最好)将起始值设置为我的日期列(日期格式)的最大值减去 2 年或 18/24 个月。
  2. 如果 1 不可行,设置开始年份(和/或年份和月份)并让 x 轴继续到我的 df 中的最新日期。

我如何做到这一点?

谢谢!

编辑: 我的 df:

> str(df_konj)
'data.frame':   1950 obs. of  3 variables:
 $ Indikator: Factor w/ 6 levels "Barometerindikatorn",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Period   : Date, format: "1996-01-01" "1996-02-01" "1996-03-01" "1996-04-01" ...
 $ value    : num  NA NA NA NA NA NA 85.6 88 88.9 91 ...

“指标”上校。有 6 个系列,每个系列都是 ggplot 中的单独一行,因为这个系列是通过 API 更新的,每个月都有新的月份,我需要 ggplot 来显示移动日期 - 我无法指定“YYYY-MM-DD”格式的日期我找到的所有帖子基本上都是指。

ggplot:

ggplot(df_konj, aes(x = Period, y = value, group=Indikator, color=Indikator, 
                    linetype=Indikator, linewidth = Indikator)) +
  geom_point() + 
  geom_line()

我脑子里的解决方案

一些代码说 1. 让 x 轴的结束日期成为日期列的最大值。称为“句点”(我想我知道最大值可以通过

max(Period)
提取-因为它采用日期格式2.并创建一个变量或在最小x值是最大值的参数中执行此操作- 值减去 z 个月 - 我认为这也可能与日期格式对象有关(但不记得如何)。无论如何,即使我有变量,我也不知道如何将它传递给 ggplot。

EDIT2 - 一个解决方案

这行得通,虽然我不确定这是生成 mindate 变量的最聪明的方法——我在 stackoverflow 上找到了一个 I 函数(减去月份),但它保留了旧日期和新日期,所以需要一个额外的步骤

maxdate <- max(df_konj$Period)
add.months = function(date,n) seq(date, by = paste (n, "months"), length = 2)
mindate <- add.months(maxdate, -18)
mindate <- mindate[2]

代码,它使用与指定确切日期相关的逻辑 all(?) post:

  scale_x_date(limits=(c(mindate, maxdate))
r date ggplot2 x-axis
1个回答
1
投票

您可以将

limits
中 x 轴的
scale_x_date
设置为 Period 变量的
max
min
值:

ggplot(df_konj, aes(x = Period, y = value, group = Indikator, color = Indikator, linetype = Indikator, linewidth = Indikator)) +
  geom_point() +
  geom_line() +
  scale_x_date(limits = c(min(df_konj$Period), max(df_konj$Period)))

这仅在 Period 为日期格式时有效。

注:

?scale_x_date
对于
limits
参数:

一个长度为 2 的数字向量,提供比例限制。 使用 NA 来指代现有的最小值或最大值。

但是,由于某种原因,这没有用。

© www.soinside.com 2019 - 2024. All rights reserved.