2012-03-12 46 views
3

我想繪製兩個迴歸摘要並排放置一個居中標題。每個迴歸摘要由plot.rqs()生成並且等於一組9個圖。多個繪圖具有高級繪圖功能,尤其是plot.rqs()

我使用par(mfrow=c(1,2))已經嘗試過,但我從保羅具有Murrel的(2006)一書瞭解到,高層次的功能,如plot.rqs()pairs()保存圖形狀態繪製前,然後還原圖形狀態一旦完成,從而使預 - 對par()layout()的正確呼叫不能幫助我。 plot.rqs()也沒有「面板」功能。

看來,要實現結果的唯一途徑是修改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'調用。 – 2012-03-12 01:28:38

+0

是的,我試過了,但是我最終輸出了錯誤信息:「x $ tau:$運算符中的錯誤對原子向量無效」。我認爲這是我做錯了:( – js86 2012-03-12 16:30:18

回答

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

哇,這是相當光滑,文森特。我一直只是複製控制檯輸出到屏幕或編輯器。 – 2012-03-12 02:41:59

+0

@DWin:但它並不總是足夠的,例如 如果函數使用非導出函數 (可能很容易使用'environment(f)< - ...'), 修復,或者更糟糕的是,如果要修改的是非導出函數。 – 2012-03-12 03:19:47

+0

Thanks Vincent !當我運行它的例子(plot.rqs)fit'fm'時,我得到這個錯誤信息:x $ tau:$運算符中的錯誤對原子向量無效 – js86 2012-03-12 15:45:16

3

首先我們生成一個示例對象fm。然後,我們複製plot.rqs並在副本上使用trace以在頂部插入par <- list,從而有效地取消在函數中使用par的任何用途。然後我們與plot.summary.rqs一樣。最後,我們有我們自己的par測試一下:

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) 

編輯:添加plot.summary.rqs

+0

謝謝!幾乎完美的作品,除非我運行它的情節是一個在另一個下面,而不是並排。我可以用佈局(矩陣(c(1,2,3,4),ncol = 2,byrow = FALSE)替換op < - par(mfrow = c(2,2)),它的工作原理正確。再次感謝! – js86 2012-03-12 15:37:37

+0

哦,當我用plot(summary(fm))代替plot(fm)時,代碼不再起作用。看起來這兩個plot函數忽略par()並在同一個地方繪製。我的結果只有在使用plot(summary())時纔可見...有關如何修復它的任何想法? – js86 2012-03-12 16:18:05

+0

已經添加了'plot.summary.rqs',所以現在這個例子顯示了兩者。 – 2012-03-13 03:55:57