【问题标题】:Problems with multiple plots in RR中多个图的问题
【发布时间】:2016-09-09 12:10:19
【问题描述】:

有没有人知道如何在 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()

【问题讨论】:

  • 函数似乎使用基于网格的图形。看party:::plotTree的代码。因此,您必须使用viewports() 将它们组合起来。我对它们不熟悉,但您可以尝试阅读 pushViewportpopViewport 和类似内容。
  • 完美!通过网格和一些努力,我做到了。我发布答案。非常感谢。
  • 发布一个明确定义的问题,进行研究并分享一个很好的答案。我们需要更多像你一样的人在这个网站上,干得好。

标签: r plot graphics


【解决方案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()

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    相关资源
    最近更新 更多