grid.arrange与John Fox的效果图

时间:2013-05-08 06:21:18

标签: r plot lattice

我想将一个窗口中的多个效果图与效果包结合起来,但不知道是否有一种简单的方法可以实现。

以下是一个不起作用的示例:

d1 <-data.frame(x1=rnorm(100,0:10),y1=rnorm(100,0:10),x2=rnorm(100,0:10),y2=rnorm(100,0:10))
require(effects)
require(gridExtra)
plot1 <- plot(allEffects(mod=lm(y1~x1,d1)))
plot2 <- plot(allEffects(mod=lm(y2~x2,d1)))
grid.arrange(plot1,plot2,ncol=2)

2 个答案:

答案 0 :(得分:2)

我认为您需要收集allEffects组件的值,然后将它们绘制为'efflist'。在我看来,绘图是基础图形,但如果你遵循类功能轨迹(或者如果你阅读:?plot.efflist),它实际上是“格子”

试试这个:

ef1 <-allEffects(mod=lm(y1~x1,d1))[[1]]
ef2 <- allEffects(mod=lm(y2~x2,d1))[[1]]
elist <- list( ef1, ef2 )
class(elist) <- "efflist"
plot(elist, col=2)

enter image description here

答案 1 :(得分:2)

有趣的是,绘制efflist(来自allEffects的结果)的结果不是格子图形;它改为使用print.lattice方法构建一个格子图形的多面板图形。但是,如果您通过从allEffects或使用effect获取元素来绘制单个效果,那么您将获得晶格图形。

要么像这样

p1 <- plot(allEffects(m1)[[1]])
p2 <- plot(allEffects(m2)[[1]])

或者像这样。

p1 <- plot(effect("x1", m1))
p2 <- plot(effect("x2", m2))

这些可以与grid.arrange结合使用;问题是,他们的班级c("plot.eff", "trellis") grid.arrange无法识别,因此必须先将它们制作成简单的trellis个对象。

class(p1) <- class(p2) <- "trellis"
grid.arrange(p1, p2, ncol=2)