Несколько графиков с высокоуровневыми функциями построения графиков, особенно plot.rqs () - PullRequest
3 голосов
/ 12 марта 2012

Я пытаюсь построить два регрессионных резюме рядом с одним центрированным заголовком.Каждое регрессионное резюме генерируется plot.rqs() и составляет набор из 9 графиков.

Я уже пытался использовать par(mfrow=c(1,2)), но, как я узнал из книги Пола Меррела (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(), которую можно использовать таким образом?

Спасибо

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

Сначала мы генерируем пример объекта, 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.

3 голосов
/ 12 марта 2012

Вы можете исправить функцию следующим образом: используйте dput и capture.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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...