有没有人知道如何在R中使用不支持mfrow
,layout
或split.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()
答案 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()