2013-03-13 16 views
12

Desidero aggiungere linee verticali su più date su un determinato grafico. Finora non sono riuscito a raggiungere questo semplice compito. Questo è quello che ho provato:Aggiungere linee verticali a 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 

Da quello che ho già letto qui, so che abline non dovrebbe funzionare con la nuova funzione chart_Series. Non sembra funzionare comunque. La funzione addLines non funziona in nessuno dei moduli che ho provato: semplice addLines, plot(addLines(...)), chart_Series(..., TA="addLines(...)") o add_TA("addLines(...)").

Ho bisogno di usare la versione sperimentale di Quantmod perché ha risolto altri problemi che avevo con la vecchia versione. d1 potrebbe essere una lista di date.

risposta

13

Non è possibile mescolare le funzioni dalle vecchie e nuove versioni delle funzioni di creazione dei grafici di quantmod. Se si desidera utilizzare addLines, è necessario utilizzare chartSeries. Anche se si utilizza addLines e chartSeries, d1 dovrebbe essere un oggetto xts, non un oggetto datetime. Per esempio:

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

quantmod::chartSeries

Se si desidera aggiungere una linea verticale utilizzando chart_Series, creare un XTS logiche oggetto con TRUE valori in cui si desidera apparire delle linee e FALSE altrimenti. Per esempio:

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

quantmod::chart_Series

Si noti inoltre che si può mettere la linea verticale "dietro" il grafico utilizzando on=-1 nella add_TA chiamata:

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

Ma si aggiunge una linea verticale qui non orizzontale, no? – agstudy

+0

@agstudy: sì, presumo fosse un errore di battitura nel titolo dell'OP. Non ho idea di come si possa aggiungere una linea orizzontale a date specifiche, poiché le date sono sull'asse x. –

+0

Ok. grazie + 1. Vedo la logica, sovrapponiamo solo le serie temporali (qui gli oggetti xts) altrimenti questo non avrà "senso". – agstudy

Problemi correlati