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

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

ответ

13

Вы не можете смешивать функции из старой и новой версий функций построения квантовых точек. Если вы хотите использовать 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')") 
+0

Но вы добавить вертикальную линию здесь не горизонтальный, не так ли? – agstudy

+0

@agstudy: да, я предполагаю, что это была опечатка в названии OP. Я понятия не имею, как можно добавить горизонтальную линию в определенные даты, так как даты находятся на оси х. –

+0

Хорошо. спасибо + 1. Я вижу логику, мы накладываем только временные ряды (здесь объекты xts), иначе это не будет иметь «смысл». – agstudy

Смежные вопросы