似乎有很多帖子您想在特定时间段内更改 ggplot 中的日期,如果您只想合并一些日期,这很容易 - 但是,我想:
我如何做到这一点?
谢谢!
编辑: 我的 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))
您可以将
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 来指代现有的最小值或最大值。
但是,由于某种原因,这没有用。