R中多个图的问题

时间:2016-09-09 12:10:20

标签: r plot graphics

有没有人知道如何在R中使用不支持mfrowlayoutsplit.screen等标准多绘图工具的绘图函数来绘制多个绘图?基本上我试图将效果图,普通图和ctree图绘制成一个图形,具有以下布局:

layout( matrix(c(1,2,3), ncol = 3) )
layout.show(3)

dev.off()

任何帮助都会很好。我对标准功能的尝试如下。

set.seed(pi)
DF  <- data.frame( x = c(rnorm(50, 3), rnorm(50, 10)),
                   y = c(rnorm(50, 3), rnorm(50, 10)) )

ct  <- party::ctree( y ~ x, data = DF )

mod <- lm( y ~ x, data = DF )
eff <- effects::effect( "x", mod )

## Attempt 1 (mfrow):
par( mfrow = c(1,3) )

plot( eff )
plot( DF$x, DF$y )
plot( ct )

par( mfrow = c(1,1) )

dev.off()

## Attempt 2 (layout):
layout( matrix(c(1,2,3), ncol = 3) )

plot( eff )
plot( DF$x, DF$y )
plot( ct )

dev.off()

## Attempt 3 (split.screen):
split.screen( rbind( c(  0, 1/3,  0,  1),
                     c(1/3, 2/3,  0,  1),
                     c(2/3,   1,  0,  1) ) )
screen(1)
plot( ct )

screen(2)
plot(DF$x, DF$y )

screen(3)
plot( eff )

close.screen(all.screens = TRUE)
dev.off()

1 个答案:

答案 0 :(得分:1)

以下代码对我说得对:

DF  <- data.frame( x = rnorm(100),
                   y = rnorm(100) )

ct  <- party::ctree( y ~ x, data = DF )

mod <- lm( y ~ x, data = DF )
eff <- effects::effect( "x", mod )

p_eff   <- plot( eff, main = '' )

plot.new()
grid::grid.newpage()
grid::pushViewport( grid::viewport( layout = grid::grid.layout(1, 3) ) )

## Plot 1 (effect plot):
grid::pushViewport( grid::viewport( layout.pos.col = 1 ) )
print( p_eff, newpage = FALSE )
grid::popViewport()

## Plot 2 (base plot):
grid::pushViewport( grid::viewport( layout.pos.col = 2 ) )
par( fig = gridBase::gridFIG(), new = TRUE )
plot( DF$x, DF$y )
grid::popViewport()

## Plot 3 (ctree plot):
grid::pushViewport( grid::viewport( layout.pos.col = 3 ) )
par( fig = gridBase::gridFIG(), new = TRUE )
plot( ct, newpage = FALSE )
grid::popViewport()