R语言xts转zoo绘图时abline()参考线位置错误是什么原因?
问题原因
- 核心问题是x轴数值单位与参考线输入单位不匹配
你两次绘图使用的时间索引底层存储单位完全不同:
第一种场景下,ts的索引是带时分秒的POSIXct类型(xts会自动将strptime返回的POSIXlt转换为POSIXct),调用plot(as.zoo(ts))时,x轴的内部刻度用的是1970-01-01 00:00:00 UTC以来的秒数。
你调用abline(v = as.Date("1950-01-01"))时,as.Date返回的日期底层存储为1970-01-01以来的天数,二者数值差了86400倍,自然无法定位到正确位置。 POSIXlt类型无法被abline自动对齐
你尝试用strptime生成时间传入的方案,返回结果是POSIXlt格式,abline不会自动将其转换为和x轴匹配的秒级数值,因此也会出现定位错误。- 第二种场景可正常运行的原因
修改后的ts.索引是Date类型,x轴内部刻度和as.Date返回的天数单位完全对齐,因此abline传入as.Date参数可以正常定位。
解决方案
针对带时分秒的时间序列绘图场景,给abline的v参数传入和原数据同时区的POSIXct类型时间即可:
plot(as.zoo(ts), type = "p") abline(v = as.POSIXct("1950-01-01", tz = "UTC"), col = "red") abline(v = as.POSIXct("2000-01-01", tz = "UTC"), col = "blue")
内容的提问来源于stack exchange,提问作者mathlete
相关产品推荐
相关产品推荐

