Add vertical lines to quantmod::chart_Series

后端 未结 2 1065
别那么骄傲
别那么骄傲 2020-12-30 07:12

I want to add vertical lines on several dates on a certain graph. So far I haven\'t managed to achieve this simple task. This is what I tried:

> s <-          


        
相关标签:
2条回答
  • 2020-12-30 07:25

    add horizontal line my example:

    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)
    

    enter image description here

    0 讨论(0)
  • 2020-12-30 07:45

    You can't mix functions from the old and new versions of quantmod's charting functions. If you want to use addLines, you have to use chartSeries. Even if you use addLines and chartSeries, d1 should be an xts object, not a datetime object. For example:

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

    quantmod::chartSeries

    If you want to add a vertical line using chart_Series, create a logical xts object with TRUE values where you want the lines to appear and FALSE otherwise. For example:

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

    quantmod::chart_Series

    Also note that you can put the vertical line "behind" the chart by using on=-1 in the add_TA call:

    chart_Series(s,TA="add_TA(l,on=-1,col='grey',border='grey')")
    
    0 讨论(0)
提交回复
热议问题