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

10

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

通常您会指定abline(v=x-intercept),但我的x轴的形式为Jan-95 - Dec-09。如何调整abline代码以添加例如Feb-95的垂直线?

我尝试过abline(v=as.Date("Jan-95"))和此代码片段的其他变体。

接下来,有没有可能通过一段代码添加多个垂直线,例如Feb-95、Feb-97和Jan-98?


另一种解决方案可以改变我的绘图,我有一个包含月份信息的列和一个包含年份信息的列,如何协作这些以在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

现在是否符合标准? - Marine-Max
谢谢,@Marine-Max,我认为那会有所帮助。我们应该很快将其迁移。 - gung - Reinstate Monica
2个回答

6
第一点提示:你的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"))

enter image description here

免责声明:这个解决方案是一个快速的hack;它既不通用也不可扩展。如果需要精确表示datetime对象和可扩展的工具,建议使用zooxts包。


5
我看到两个问题:
a) 将数据转换为日期/POSIX元素,和
b) 在特定行上实际绘制垂直线。
对于第一个问题,创建一个正确的日期字符串,然后使用 strptime()
第二个问题是通过使用 as.numeric() 将 POSIX 日期转换为数字来解决的。
# 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')

Simple plot with dates on x-axis and vertical lines creating using abline


我发现如果我使用'as.Date'格式化了我的data.table日期列,我可以将整个X轴转换为垂直线,如下所示:abline(v=as.numeric(d1$ReceivedDate))。 - rferrisx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接