2012-01-11 52 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) 
    } 

(你會發現我加布林帶過,可以肯定的覆蓋也能夠被識別。)