【发布时间】:2021-10-25 08:38:49
【问题描述】:
我看到 here abline() 不适用于 xts 绘图。我通常使用xts 对象中的plot(as.zoo()) 并遇到以下问题。让我们首先生成一些虚拟时间序列数据(start 和 end 的定义很关键):
library(xts)
start <- strptime("1888-01-01 00:30", format = "%Y-%m-%d %H:%M", tz = "UTC")
end <- strptime("2019-12-31 00:10", format = "%Y-%m-%d %H:%M", tz = "UTC")
n <- 1000
dates <- seq(start, end, length.out = n)
set.seed(1)
dat <- rnorm(n)
ts <- xts(dat, order.by = dates)
现在让我们尝试将ts 绘制为zoo 对象并添加行:
plot(as.zoo(ts), type = "p")
abline(v = as.Date("1950-01-01"), col = "red") # not placed at the right location
abline(v = as.Date("2000-01-01"), col = "blue") # same (wrong) placement
abline(v = strptime("1950-01-01 00:00", format = "%Y-%m-%d %H:%M", tz = "UTC"), col = "green") # also fails
所有abline() 调用似乎都在同一个(错误的)位置进行,为什么?
备注:以下使用 start 和 end 的不同定义,并且按预期工作:
start. <- as.Date(start)
end. <- as.Date(end)
dates. <- seq(start., end., length.out = n)
ts. <- xts(dat, order.by = dates.)
plot(as.zoo(ts.), type = "p")
abline(v = as.Date("1950-01-01"), col = "red")
【问题讨论】:
-
查看
axis(3),您将日期与日期时间对象混合在一起plot(as.zoo(ts), type = "p"); abline(v = as.numeric(strptime("1950-01-01 00:30", format = "%Y-%m-%d %H:%M", tz = "UTC")))和as.numeric(as.Date("1950-01-01"))在x 轴的刻度上约为0 -
...很好,谢谢。有没有机会让
abline()在给定的日期时间对象上绘图? -
是的,出于某种原因,您只需要在我的示例中使用
abline(v = as.numeric(...)),我认为这对您来说是自动/强制转换为数字的,但显然不是 -
啊,我明白了,
abline(v = as.numeric(strptime("1950-01-01 00:30", format = "%Y-%m-%d %H:%M", tz = "UTC")))确实有效,谢谢。你想把这个公式化为答案吗?