【问题标题】:plots generated by 'ggpair' and 'ggplot' side-by-side'ggpair' 和 'ggplot' 并排生成的图
【发布时间】:2015-12-29 17:55:18
【问题描述】:

给定两个 ggplots,我们可以并排排列它们

library(ggplot2)
library(gridExtra)

# Data
data(iris)
df <- data.frame(y = rnorm(100))

# Plotting
p1 <- qplot(data=iris, Sepal.Width, Sepal.Length)
p2 <- ggplot(df, aes(x=1:100, y=y)) + geom_line()
grid.arrange(p1, p2, ncol=2)

如果其中一个图是ggpair 对象,我们该怎么做?

library(GGally)
p1 <- ggpairs(iris, colours='Species')
p2 <- ggplot(df, aes(x=1:100, y=y)) + geom_line()
grid.arrange(l, p2, ncol=6)
# Error in gList(list(list(data = list(Sepal.Length = c(5.1, 4.9, 4.7, 
#  4.6,  : only 'grobs' allowed in "gList"

【问题讨论】:

标签: r ggplot2


【解决方案1】:

首先编辑print.ggpairs 函数,使其不再调用grid.newpage。对于那个电话

library(GGally)
fixInNamespace("print.ggpairs", ns = "GGally")

并将第 32 行设为注释。然后就可以使用网格函数了:

library(ggplot2)
data(iris)
df <- data.frame(y = rnorm(100))

p1 <- ggpairs(iris, colours='Species')
p2 <- ggplot(df, aes(x=1:100, y=y)) + geom_line()

library(grid)
grid.newpage()
pushViewport(viewport(layout=grid.layout(1,2)))
vp1 <- viewport(layout.pos.col=1,
                layout.pos.row=1)
vp2 <- viewport(layout.pos.col=2,
                layout.pos.row=1)
pushViewport(vp1)
p1
popViewport()
pushViewport(vp2)
plot(p2, vp = vp2)
popViewport()

编辑:我已经提交了一个功能请求,并且 ggally 维护者添加了一个参数来关闭grid.newpage,即,您现在可以执行print(p1, gridNewPage = FALSE)https://github.com/ggobi/ggally/issues/125

【讨论】:

    【解决方案2】:

    您可以从 ggpairs 图中快速创建一个网格对象。它可能不如 Roland 在?grid.grab 帮助页面中编写新的 ggpairs 打印方法的方法那么健壮。 * ... 不能保证忠实地复制所有可能的网格输出。”(虽然使用wrap 参数表明它应该,但它超出了我的理解)

    library(ggplot2)
    library(grid)
    library(gridExtra)
    library(GGally)
    
    df <- data.frame(y = rnorm(100))    
    p1 <- ggpairs(iris, colours='Species')
    p2 <- ggplot(df, aes(x=1:100, y=y)) + geom_line()
    
    g <- grid.grabExpr(print(p1))
    grid.arrange(g, p2, widths=c(0.8,0.2))
    

    【讨论】:

    • 为什么它不那么健壮?
    • 除非我遗漏了什么,如果你使用print(p1),那么你可以将代码嵌入到一个函数中,它是全自动的。
    • 是的,你是对的 - (删除了我的错误评论),但在帮助页面中添加了一些文本.. 还使用grid.grabExpr 更新了代码,无需进入情节即可抓取情节窗口,添加打印后。欢呼
    猜你喜欢
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    相关资源
    最近更新 更多