从R中的多图输出中抓取单个图

时间:2013-06-03 16:38:00

标签: r data-visualization

我试图从多个绘图输出中抓取一个图。例如

library(mboost); 
mod=gamboost(Ozone~.,data=airquality[complete.cases(airquality),]); 
plot(mod)

以上为每个变量的“部分效果”创建了一个图表。对于绘制线性模型(lm)时创建的残差图也可以这样说。我试图将输出保存在类似于如何保存ggplot的列表中,并花了几个小时搜索如何只提取一个图但却失败了。有什么建议吗?

至于问题的背景,我正在尝试将这些情节放入一个闪亮的应用程序中,并将可变数量的图表显示为输出。

会话信息如下: R版本2.15.2(2012-10-26) 平台:i386-redhat-linux-gnu(32位)

3 个答案:

答案 0 :(得分:4)

许多产生多个图的函数也有一个参数来选择图的子集。在plot.lm的情况下,它是which参数。所以说plot(fit, which=1)只会产生一个情节。

您可以查看mboost文档,看看该绘图函数是否有类似的参数。

答案 1 :(得分:2)

基本上,@ greg-snow提供了一个合适的解决方案。我会详细说明一下。

mboost中,您可以使用

plot(mod, which = "Day")

仅绘制Day的效果。当我们使用正则表达式时,你甚至可以使用参数which做更多的事情。在具有线性和平滑效果的模型中,您可以例如提取所有平滑效果以进行绘图:

airquality$Month <- as.factor(airquality$Month)
mod <- mod <- gamboost(Ozone ~ bbs(Solar.R) + bbs(Wind) + bbs(Temp) + bols(Month) + bbs(Day), data=airquality[complete.cases(airquality),])

## now plot bbs effects, i.e., smooth effects:
par(mfrow = c(2,2))
plot(mod, which = "bbs")

## or the linear effect only
par(mfrow = c(1,1))
plot(mod, which = "bols")

您可以使用名称的任何部分(请参阅例如names(coef(mod)))来定义要绘制的效果。您还可以使用整数值来定义which效果以绘制:

plot(mod, which = 1:2)

请注意,这也可用于某些提取系数。 E.g。

coef(mod, which = 1)
coef(mod, which = "Solar")
coef(mod, which = "bbs(Solar.R)") 

都是一样的。有关如何在whichcoef中指定plot的更多信息,请参阅我们的tutorial paper(Hofner等人(2014年),基于模型的增强R - A动手教程使用R包mboost。计算统计,29:3-35。DOI 10.1007 / s00180-012-0382-5)。

我们承认,目前mboost中没有记录这一点,但它位于我们的待办事项列表中(请参阅github issue 14)。

答案 2 :(得分:1)

(我不熟悉GAMboost。)

查看?plot.GAMBoost的文档,我看到有一个名为select的参数。我知道你会将这个参数设置为你感兴趣的变量,然后你就会得到你想要的单个图。这与@GregSnow注意到的which中的plot.lm参数类似。