2012-01-11 92 views
8

我试图将6天的盘中数据绘制为6个图表。 Quantmod的实验chart_Series()函数可以与par()设置一起使用。我已经预加载数据到bars(XTS对象的载体),所以我的代码如下所示:R/quantmod:多个图表全部使用相同的y轴

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

但它失败并显示“unused argument(s)”错误。 yrange = ylim也失败。

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

回答

8

With 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) 
) 
} 
+0

感谢文森特的作品!有关如何使用布局恢复卷子图表的任何建议/链接/文章? – 2012-01-12 03:03:29

+1

我已经添加了一个'layout'的例子(在看到你的答案之前...) – 2012-01-12 03:47:22

1

谷歌搜索了解文森特的答案导致我的布局()命令。它似乎与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) 
    } 

(你会发现我加布林带过,可以肯定的覆盖也能够被识别。)