2013-03-13 93 views
12

我想在某個圖形的幾個日期上添加垂直線。到目前爲止,我還沒有設法完成這個簡單的任務。這是我的嘗試:將垂直線添加到quantmod :: chart_Series

> s <- get(getSymbols('nvmi'))["2012::"] 
> d1 <- index(s[100]) 
> d1 
[1] "2012-05-24" 

> chart_Series(s,TA="addLines(v=d1)") 
Error in get.current.chob() : improperly set or missing graphics device 

> chart_Series(s) 
> abline(v=d1) 
# nothing 

> add_TA("addLines(v=d1") 
Error in `[.data.frame`(lenv$xdata, Env$xsubset) : 
    undefined columns selected 

從我已經讀到這裏,我知道abline不應該用新的chart_Series功能工作。無論如何,這似乎並不奏效。 addLines函數不能以我試過的任何形式工作 - 普通addLinesplot(addLines(...)),chart_Series(..., TA="addLines(...)")add_TA("addLines(...)")

我需要使用quantmod的實驗版本,因爲它解決了舊版本中的其他問題。 d1最終會是一個日期列表。

回答

13

您不能混合來自quantmod的圖表功能的舊版本和新版本的功能。如果你想使用addLines,你必須使用chartSeries。即使您使用addLineschartSeries,d1應該是一個xts對象,而不是日期時間對象。例如:

library(quantmod) 
data(sample_matrix) 
s <- as.xts(sample_matrix) 
chartSeries(s,TA="addLines(v=s[100])") 

quantmod::chartSeries

如果要添加使用chart_Series垂直線,創建一個邏輯XTS與您希望出現直線和FALSE否則TRUE值對象。例如:

l <- xts(!as.logical(s[,1]),index(s)) 
l[100] <- TRUE 
chart_Series(s,TA="add_TA(l,on=1)") 

quantmod::chart_Series

另外請注意,您可以通過在add_TA通話使用on=-1把垂直線「的背後」圖表:

chart_Series(s,TA="add_TA(l,on=-1,col='grey',border='grey')") 
+0

但您在此處添加一條垂直線不是橫向的,不是? – agstudy 2013-03-13 12:18:12

+0

@agstudy:是的,我認爲這是OP的標題中的一個錯字。我不知道如何在特定日期添加水平線,因爲日期在x軸上。 – 2013-03-13 12:21:22

+0

好的。感謝+ 1。我看到邏輯,我們只重疊時間序列(這裏是xts對象),否則這不會有「意義」。 – agstudy 2013-03-13 12:24:29