Подтвердить что ты не робот

Добавить вертикальные линии в 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 не работает ни в одной из форм, которые я пробовал - plain addLines, plot(addLines(...)), chart_Series(..., TA="addLines(...)") или add_TA("addLines(...)").

Мне нужно использовать экспериментальную версию quantmod, потому что она решила другие проблемы, которые у меня были со старой версией. d1 в конечном итоге будет списком дат.

4b9b3361

Ответ 1

Вы не можете смешивать функции из старой и новой версий функций построения квантовых точек. Если вы хотите использовать addLines, вы должны использовать chartSeries. Даже если вы используете addLines и chartSeries, d1 должен быть объектом xts, а не объектом datetime. Например:

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

quantmod::chartSeries

Если вы хотите добавить вертикальную линию с помощью chart_Series, создайте объект логического xts со значениями TRUE, где вы хотите, чтобы строки появлялись и FALSE в противном случае. Например:

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

quantmod::chart_Series

Также обратите внимание, что вы можете поместить вертикальную линию позади диаграммы, используя on=-1 в вызове add_TA:

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