Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add vertical lines to quantmod::chart_Series

Tags:

r

quantmod

I want to add vertical lines on several dates on a certain graph. So far I haven't managed to achieve this simple task. This is what I tried:

> 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

From what I have already read here, I know that abline is not supposed to work with the new chart_Series function. It doesn't seem to work anyway. The addLines function does not work in any of the forms I tried - plain addLines, plot(addLines(...)), chart_Series(..., TA="addLines(...)") or add_TA("addLines(...)").

I need to use the experimental version of quantmod because it solved other problems I had with the old version. d1 would eventually be a list of dates.

like image 430
haki Avatar asked Mar 13 '13 11:03

haki


1 Answers

You can't mix functions from the old and new versions of quantmod's charting functions. If you want to use addLines, you have to use chartSeries. Even if you use addLines and chartSeries, d1 should be an xts object, not a datetime object. For example:

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

quantmod::chartSeries

If you want to add a vertical line using chart_Series, create a logical xts object with TRUE values where you want the lines to appear and FALSE otherwise. For example:

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

quantmod::chart_Series

Also note that you can put the vertical line "behind" the chart by using on=-1 in the add_TA call:

chart_Series(s,TA="add_TA(l,on=-1,col='grey',border='grey')")
like image 151
Joshua Ulrich Avatar answered Sep 26 '22 16:09

Joshua Ulrich