2016-04-19 5 views
0

私は、入力条件に応じて行数が変わるフォレストプロット(metaforを使用)を使用しています。私のコードを使用して、各実行後にプロットを保存します。森林プロットを保存する(metafor)

dev.copy(png,'myplot.png') 
dev.off() 

をプロット内の行の数に応じて、データがぺしゃんこにすることができます。約30行を超えるとデータが判読不能になります。以下の例を参照してください。最初のグラフは読み込み可能ですが、2番目のグラフは役に立たず、より多くのデータを含めるためには悪化します。

グラフを保存して高さが行に合わせて自動的に更新されるようにする方法はありますか?グラフが正方形である必要は特にありませんが、実際にはデータに合わせて長方形になると考えています。チャートコードは、参照のために質問の基盤に含まれています。

enter image description here

enter image description here

forest(x = final$AvgPts, ci.lb = final$min, ci.ub = final$max, slab = final$Players, 
ilab = final$value, ilab.xpos = max(final$max)+10,ilab.pos =4, alim = c(min(final$min)-5, 
max(final$max)+5), xlim = c(min(final$min)-170, 2*(max(final$max)+5)), 
xlab = "Moneyball Points Spread", efac = 1, cex = 0.75, mgp = c(1, 1, 0), 
refline=mean(final$AvgPts),digits=1,col="dark blue",pch = 19, 
main=paste("2016 Moneyball Summary (position =",pos,"and min average >",points,")")) 

答えて

1

代わりのdev.copy()を使用して、このです:

  1. は、森林プロットに含まれますk(研究の数=行数)を決定。
  2. height属性はk一部の適切な機能(k大きく、大きなheightの値)であるpng()とプロットデバイスを開き。
  3. フォレストプロットを描画します。
  4. プロットデバイスをdev.off()で閉じます。
  5. 利益!

ステップ2.実際には少しトリッキーです。いくつかの試行錯誤の末、私はheight = 200 + 40*k^.85が問題なく動作しているようだ。 forest()の場合は、cex=1を使用して、文字/記号の拡張係数が一定のままになり、そうでない場合kが大きい場合は4%のパディングが奇妙に見えるため、yaxs="i"とします。しかし、さらにylimを調整して、x軸と最初の行の間にもう少しのスペースがあるようにします。最後にefacを適切な減少関数のkにする必要があります。繰り返しますが、試行錯誤の末、efac=30/(k+10)が動作するように見えました。ここで

はこれをテストするためのいくつかのコードです:

library(metafor) 

ks <- c(5, 10, 20, 40, 80, 160, 320) 

for (k in ks) { 

    vi <- runif(k, .05, 1) 
    yi <- rnorm(k, 0, sqrt(vi)) 

    png(paste0("forest_k=", formatC(k, format="f", flag="0", width=3, digits=0), ".png"), height = 200 + 40*k^.85) 
    forest(yi, vi, xlim=c(-10,10), alim=c(-4,4), efac=30/(k+10), cex=1, yaxs="i", ylim=c(0,k+3)) 
    text(-10, k+2, "Study", pos=4) 
    text(10, k+2, "Estimate [95% CI]", pos=2) 
    dev.off() 

} 

さて、最後に、これはハックソリューションのビットですが、動作するように表示されます。

また、よりエレガントかもしれないが、この作業を行う方法を自分で確認する必要がありますhttps://stackoverflow.com/a/28239750/2615367があります。

+0

これは私が必要としていたものです。非常に感謝しています。 – Morts81

関連する問題