R/quantmod: multiple charts all using the same y-axis

后端 未结 2 1050
一向
一向 2020-12-15 12:38

I\'m trying to plot 6 days of intraday data as 6 charts. Quantmod\'s experimental chart_Series() function works with par() settings. I\'ve pre-loaded the data into bar

相关标签:
2条回答
  • 2020-12-15 13:01

    With chartSeries, you can set the layout argument to NULL to prevent the layout() command from being called: this is what disables the mfrow setting.

    library(quantmod)
    getSymbols("AA")
    
    op <- par(mfrow=c(3,2))
    for(i in 1:6) {
      chartSeries(
        AA["2011-01"], "candlesticks", 
        TA=NULL, # No volume plot
        layout=NULL, 
        yrange=c(15,18)
      )
    }
    par(op)
    

    If you want to keep the volume, you can call layout instead of setting mfrow: it does basically the same thing, but allows you to have plots of different sizes and choose the order in which they are plotted.

    layout( matrix( c(
        1, 3,
        2, 4,
        5, 7,
        6, 8,
        9, 11,
       10, 12
      ), nc=2, byrow=TRUE),
      heights = rep( c(2,1), 3 )
    )
    #layout.show(12) # To check that the order is as desired
    for(i in 1:6) {
      chartSeries( 
        AA[sprintf("2011-%02d",i)], 
        "candlesticks", layout=NULL, yrange=c(15,19) 
      )
    }
    
    0 讨论(0)
  • 2020-12-15 13:04

    Googling to understand Vincent's answer led me to the layout() command. It seems incompatible with par(mfrow), but some more experimentation found it can be used as an alternative.

    ylim=c(18000,20000)
    layout(matrix(1:12,nrow=6,ncol=2), height=c(4,2,4,2,4,2))
    for(d in bars){
        chartSeries(d,layout=NULL,TA=c(addVo(),addBBands()),yrange=ylim)
        }
    

    (You'll notice I added bollinger bands too, to be sure overlays still work too.)

    0 讨论(0)
提交回复
热议问题