2013-03-13 13 views
12

Belirli bir grafikte birkaç tarihte dikey çizgiler eklemek istiyorum. Şimdiye kadar bu basit görevi başaramadım. Zaten burada okudum kadarıylaQuantmod için dikey çizgiler ekleyin :: 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 

, ben abline yeni chart_Series fonksiyonu ile çalışmak gerekiyordu olmadığını biliyorum: Bu denedim budur. Yine de işe yaramıyor. addLines işlevi, denediğim formlarda çalışmaz - düz addLines, plot(addLines(...)), chart_Series(..., TA="addLines(...)") veya add_TA("addLines(...)").

Quantmod deneysel sürümünü kullanmam gerekiyor çünkü eski sürümde yaşadığım diğer sorunları çözdüm. d1 sonuçta bir tarih listesi olacaktır.

cevap

13

Quantmod'ın charting işlevlerinin eski ve yeni sürümlerinden işlevleri birleştiremezsiniz. addLines kullanmak isterseniz, chartSeries kullanmanız gerekir. addLines ve chartSeries kullanıyor olsanız bile, d1 bir datetime nesnesi değil bir xts nesnesi olmalıdır. Örneğin: chart_Series kullanarak dikey bir çizgi eklemek istiyorsanız

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

quantmod::chartSeries

, mantıksal XTS aksi takdirde hatları görünmesini istediğiniz ve FALSETRUE değerlerle nesne oluşturun. Örneğin:

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

quantmod::chart_Series

Ayrıca add_TA çağrısında on=-1 kullanarak grafik "arkasında" dikey çizgi koymak unutmayın:

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

Ama burada dikey bir satır ekleyin yatay değil, değil mi? – agstudy

+0

@agstudy: Evet, OP'in başlığında bir yazım hatası olduğunu varsayalım. Tarihler x ekseni üzerinde olduğundan, belirli tarihlerdeki yatay çizgiyi nasıl ekleyebileceğine dair hiçbir fikrim yok. –

+0

Tamam. sayesinde + 1. Mantığı görüyorum, sadece zaman serilerini (burada xts nesneleri) varsayalım, aksi takdirde bu "duyu" olmayacaktır. – agstudy