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 轴刻度。我想设置一个涵盖所有 6 天的 y 范围,但找不到这样做的方法。我试过这个:

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

但它因“未使用的参数”错误而失败。yrange=ylim 也失败了。

我可以使用 chartSeries(d,yrange=ylim),它可以工作。但据我所知,我不能将多个图表放在一个显示中(?)。(它可能严格来说是偏离主题的,但是对于可以绘制漂亮烛台图表、允许 y 轴控制并且可以在一张图像上绘制多个图表的替代 R 包的建议也将非常受欢迎。)

4

2 回答 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) 
  )
}
于 2012-01-11T08:10:16.713 回答
2

谷歌搜索以了解文森特的答案使我找到了 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)
    }

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

于 2012-01-12T03:34:27.900 回答