当x轴是日期时使用abline()(即时间序列数据)

Mar*_*Max 7 r data-visualization time-series

我想在绘图中添加多条垂直线.

通常你会指定,abline(v=x-intercept)但我的x轴的形式是Jan-95 - Dec-09.我如何调整abline代码以添加垂直线,例如在95年2月?

我试过abline(v=as.Date("Jan-95"))这段代码的其他变种.

接下来是可以用一段代码添加多条垂直线,例如95年2月,97年2月和98年1月?


另一种解决方案可能是改变我的情节,我有一个包含月份信息的列和一个包含年份信息的列,我如何协作这些以在X轴上有一年的月份?

 example[25:30,]
   Year Month    YRM TBC
25 1997     1 Jan-97 136
26 1997     2 Feb-97 157
27 1997     3 Mar-97 163
28 1997     4 Apr-97 152
29 1997     5 May-97 151
30 1997     6 Jun-97 170
Run Code Online (Sandbox Code Playgroud)

ton*_*nov 5

第一个注意事项:您的YRM列可能是一个因素,而不是日期时间对象,除非您手动转换它.我认为我们不想这样做,我们的情节看起来很好,因为YRM是一个因素.

在这种情况下

vline_month <- function(s) abline(v=which(s==levels(df$YRM)))
# keep original order of levels
df$YRM <- factor(df$YRM, levels=unique(df$YRM))
plot(df$YRM, df$TBC)
vline_month(c("Jan-97", "Apr-97"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

免责声明:这个解决方案是一个快速的黑客攻击; 它既不普遍也不可扩展.要准确表示日期时间对象和它们的可扩展工具,请参阅包zooxts.


Cyr*_*lle 5

我看到两个问题:

a) 将您的数据转换为日期/POSIX 元素,以及

b) 在特定行实际绘制垂直线。

首先,创建一个合适的日期字符串,然后使用strptime().

第二个问题是通过使用 将 POSIX 日期转换为数字来解决的as.numeric()

# dates need Y-M-D
example$ymd <- paste(example$Year, '-', example$Month, '-01', sep='')

# convet to POSIX date
example$ymdPX <- strptime(example$ymd, format='%Y-%m-%d')
# may want to define tz otherwise system tz is used

# plot your data
plot(example$ymdPX, example$TBC, type='b')

# add vertical lines at first and last record
abline(v=as.numeric(example$ymdPX[1]), lwd=2, col='red')
abline(v=as.numeric(example$ymdPX[nrow(example)]), lwd=2, col='red')
Run Code Online (Sandbox Code Playgroud)

使用 abline 创建的 x 轴上的日期和垂直线的简单绘图