2012-03-12 43 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