我想在某个图表上的几个日期添加垂直线条。到目前为止,我还没有完成这项简单的任务。这就是我试过的:
> 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
最终将成为日期列表。
答案 0 :(得分:14)
您不能混合使用新旧版本的quantmod图表功能。如果您想使用addLines
,则必须使用chartSeries
。即使您使用addLines
和chartSeries
,d1
也应该是xts对象,而不是日期时间对象。例如:
library(quantmod)
data(sample_matrix)
s <- as.xts(sample_matrix)
chartSeries(s,TA="addLines(v=s[100])")
如果要使用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)")
另请注意,您可以使用on=-1
来电中的add_TA
将垂直线放在图表后面:
chart_Series(s,TA="add_TA(l,on=-1,col='grey',border='grey')")
答案 1 :(得分:0)
在我的示例中添加水平线:
library(quantmod)
library(lubridate)
stockId<-"CVS"
showperiod<-6 # 6 months
stockData<-getSymbols(stockId, src="yahoo",auto.assign=FALSE)
startDate<-Sys.Date()-months(showperiod,abbreviate = FALSE)
fromDate<-paste0(year(startDate),month(startDate))
subset<-paste0(fromDate,"/")
mytheme <- chart_theme()
mytheme$col$dn.col <- "firebrick1"
mytheme$col$up.col <- "darkgreen"
chart_Series(stockData, name = stockId, subset = subset, theme = mytheme)
#if you add line at 2018-6-18 to 2018-07-16 & y(price)=72
#you need creat new data to plot
#
ntick<-nrow(stockData["20180618/20180716"]) #2018-6-18 to 2018-07-16 tick numbers
getDate<-index(stockData["20180618/20180716"])
y<-rep(72,ntick)
df<-data.frame(getDate,y)
linedata<-xts(df$y,order.by = df$getDate)
# add line
add_TA(linedata,on=-1,col="blue",lwd=2)