2012-03-12 14 views
3

私は1つの中心のタイトルで2つの回帰サマリーを並べてプロットしようとしています。各回帰サマリーはplot.rqs()によって生成され、9つのプロットの集合になります。高レベルのプロット関数、特にplot.rqs()を使用した複数のプロット

私はすでにpar(mfrow=c(1,2))を使用してみましたが、私はポールムーレルの(2006)の本から学んだように、plot.rqs()またはpairs()のような高レベルの機能を描画する前に、グラフィックスの状態を保存し、一度完成し、グラフィックス状態を復元、事前いるのでpar()またはlayout()への先制的な呼び出しは私を助けません。 plot.rqs()には 'panel'機能もありません。

結果を達成するための唯一の方法は、新しい機能を得るためにplot.rqs()機能を変更modified.plot.rqs()を言う、そしてそこから、私はどのように出て仕事をすることができるかもしれない

par(mfrow=c(1,2)) 
modified.plot.rqs(summary(fit1)) 
modified.plot.rqs(summary(fit2)) 
par(mfrow=c(1,1)) 

実行することであると思われますlayout()を使用して画像全体のタイトルを追加します。誰もこの方法で使用できるmodified.plot.rqs()関数を作成する方法を知っていますか?

おかげ

あなたが機能にパッチを適用することができます
+0

'plot.rqs'(または' plot.summary.rqs')を見て、問題の 'par'呼び出しを取り除くことができます。 –

+0

はい私は試しましたが、エラーメッセージ "$ x tau:$ operatorのエラーはアトミックベクトルには無効です"で終了しました。私はそれが私が間違っていた何かだと思った:( – js86

答えて

3

は、次のように: 使用dputcapture.output文字列として、 関数のコードを取得します。 必要に応じて変更してください(ここでは、私はpar の各オカレンスを何もしない関数に置き換えます)。 最終的に結果を評価して新しい関数を生成します。

library(quantreg) 
a <- capture.output(dput(plot.summary.rqs)) 
b <- gsub("^\\s*par\\(", "nop(", a) 
nop <- function(...) {} 
my.plot.summary.rqs <- eval(parse(text=b)) 
+0

うわーかなり滑らかな、Vincent。私は常にスクリーンやエディタにコンソール出力をコピーした。 –

+0

@DWin:しかし、それは必ずしも十分ではない、 関数がエクスポートされていない関数 (おそらく 'environment(f)< - ...'で修正しやすい)、 、または悪い場合は、変更したいものがエクスポートされていない関数である場合。 –

+0

Thanks Vincent !私が(plot.rqs)の例でそれを実行すると、 'fm'に合っています。このエラーメッセージが表示されます:x $ tauのエラー:$演算子はアトミックベクトルに対して無効です – js86

3

最初に、例オブジェクトfmを生成します。次に、plot.rqsをコピーし、コピー内にtraceを使用して、par <- listを挿入すると、機能内でparの使用が無効になります。それではplot.summary.rqsと同じことをします。

library(quantreg) 
example(plot.rqs) # fm to use in example 

# plot.rqs 
plot.rqs <- quantreg::plot.rqs 
trace("plot.rqs", quote(par <- list), print = FALSE) 

# plot.summary.rqs 
plot.summary.rqs <- quantreg::plot.summary.rqs 
trace("plot.summary.rqs", quote(par <- list), print = FALSE) 

# test it out 
op <- par(mfrow = c(2, 2)) 

plot(summary(fm)) 
plot(fm) 
title("My Plots", outer = TRUE, line = -1) 

par(op) 

EDIT:最後に、我々はpar私たち自身でそれをテストplot.summary.rqsを追加しました。

+0

ありがとう!ほぼ完璧に動作しますが、それを実行する場合を除いて、プロットはサイドバイサイドではなく、1つ下に並んでいます。私は、レイアウト(行列(c(1,2,3,4)、ncol = 2、byrow = FALSE)でop < - par(mfrow = c(2,2))を置き換えることができます。再度、感謝します! – js86

+0

ああ、plot(fm)をplot(summary(fm))に置き換えたとき、コードはもう機能しなくなりました。 2つのプロット関数がpar()を無視して同じ場所に描画するようです。私の結果は、私がplot(summary())を使用している場合にのみ表示されます...それを修正する方法に関する考えはありますか? – js86

+0

'plot.summary.rqs'も追加しました。ここでは両方の例を示します。 –

関連する問題