2012-01-11 22 views
8

6日間のデータを6つのグラフとしてプロットしようとしています。 Quantmodの実験的なchart_Series()関数はpar()設定で動作します。R/quantmod:同じY軸を使用する複数のグラフ

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

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

これは動作しますが、各チャートは、独自の異なるy軸のスケールを持っている:私は私のコードは次のようになります(XTSオブジェクトのベクトル)あらかじめロードされたbarsにデータをしました。私はすべての6日間をカバーするy-範囲を設定したいが、これを行う方法を見つけることができない。私はこれを試みた:

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

しかし、 "未使用の引数"エラーで失敗します。 yrange = ylimも失敗します。

私はchartSeries(d、yrange = ylim)を使うことができます。しかし、私が知る限り、複数のチャートを1つのディスプレイ(?)に配置することはできません。 (これは厳密にはオフの対象かもしれませんが、、見栄えの良いローソク足チャートを描画し、y軸の制御を可能にし、一つの画像に複数のグラフを描くことができ、代替Rパッケージの提案も非常に歓迎されるであろう。)

答えて

8

付きchartSeriesの場合はNULLlayout引数を設定して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) 

ボリュームを維持したい場合は、代わりにmfrowを設定するlayoutを呼び出すことができます。それは基本的に同じことをしていますが、異なるサイズのプロットを持っており、それらがプロットされる順序を選択することができます。

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

おかげヴィンセント、!どのようにボリュームのサブチャートを戻すレイアウトを使用する方法についての任意の提案/リンク/記事? –

+1

私は 'layout'を使って例を追加しました(答えを見る前に...) –

1

Googleがレイアウト()コマンドにつながったと私は知りました。これは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) 
    } 

(あなたは私がオーバーレイはまだあまりにも仕事を確認するために、あまりにもボリンジャーバンドを追加気付くでしょう。)作品

関連する問題