R/quantmod:多个图表使用相同的Y轴

7

我正在尝试将6天的日内交易数据绘制为6个图表。Quantmod的实验性chart_Series()函数使用par()设置。我已经预加载了数据到bars中(一个XTS对象的向量),所以我的代码看起来像这样:

par(mfrow=c(3,2))   #3 rows, 2 columns

for(d in bars){
    print(chart_Series(d, type = "candlesticks") )
    }

这个方法可以使用,但每个图表都有自己不同的y轴刻度。我想设置一个y轴范围,覆盖所有6天,但找不到方法。我尝试过以下方法:

ylim=c(18000,20000)
print(chart_Series(d, type = "candlesticks",ylim=ylim) )

但是它会出现“未使用的参数”错误,yrange=ylim也会失败。

我可以使用chartSeries(d,yrange=ylim),这样就能正常工作了。但据我所知,我不能将多个图表放在一个显示中(?)。 (可能严格来说不是主题,但欢迎提供其他能够绘制漂亮的K线图、允许控制y轴并能在一个图像上绘制多个图表的R软件包的建议。)

2个回答

8
使用 chartSeries 函数时,可以将 layout 参数设置为 NULL,以防止调用 layout() 命令:这会禁用 mfrow 设置。
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)

如果您想保留体积,可以调用layout而不是设置mfrow:它基本上做的是相同的事情,但允许您拥有不同大小的图表并选择它们绘制的顺序。
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) 
  )
}

谢谢Vincent,这个方法很有效!有没有关于如何使用布局来恢复音量子图的建议/链接/文章? - Darren Cook
1
我已经添加了一个带有“layout”示例的代码(在看到您的答案之前...) - Vincent Zoonekynd

2

通过谷歌搜索了解Vincent的答案,我找到了layout()命令。它似乎与par(mfrow)不兼容,但进行了更多的实验后发现它可以作为替代方案使用。

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)
    }

(您会注意到我添加了布林带,以确保覆盖仍然有效。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接