2013-03-13 7 views
12

Chcę dodać pionowe linie na kilku datach na pewnym wykresie. Do tej pory nie udało mi się osiągnąć tego prostego zadania. To, co starałem:Dodaj pionowe linie do 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 

Z tego, co ja już przeczytać tutaj, wiem, że abline nie ma pracować z nowym chart_Series funkcji. To i tak nie działa. Funkcja addLines nie działa w żadnej z wypróbowanych form - zwykły addLines, plot(addLines(...)), chart_Series(..., TA="addLines(...)") lub add_TA("addLines(...)").

Potrzebuję użyć eksperymentalnej wersji quantmodu, ponieważ rozwiązał on inne problemy, które miałem ze starą wersją. d1 będzie ostatecznie listą dat.

Odpowiedz

13

Nie można łączyć funkcji ze starej i nowej wersji funkcji wykresów kwantowych. Jeśli chcesz użyć addLines, musisz użyć chartSeries. Nawet jeśli użyjesz addLines i chartSeries, d1 powinien to być obiekt xts, a nie obiekt datetime. Na przykład:

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

quantmod::chartSeries

Jeśli chcesz dodać pionową linię przy użyciu chart_Series, tworzyć logiczną XTS obiekt o wartości TRUE gdzie chcesz linie pojawiają się i FALSE inaczej. Na przykład:

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

quantmod::chart_Series

Należy również pamiętać, że można umieścić linię pionową „za” na wykresie za pomocą on=-1 w add_TA rozmowy:

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

Ale dodać pionową linię tutaj nie poziomy, czyż nie? – agstudy

+0

@agstudy: tak, zakładam, że był to literówka w tytule OP. Nie mam pojęcia, jak dodać poziomą linię w określonych datach, ponieważ daty są na osi X. –

+0

Ok. dzięki + 1. Widzę logikę, przejmujemy tylko serie czasowe (obiekty xts tutaj), inaczej nie będzie to miało "sensu". – agstudy

Powiązane problemy