当前位置:  开发笔记 > 编程语言 > 正文

由'ggpair'和'ggplot'并排生成的图

如何解决《由'ggpair'和'ggplot'并排生成的图》经验,为你挑选了2个好方法。

鉴于两个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)

情节1

如果其中一个图是一个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"

Roland.. 8

首先编辑该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



1> Roland..:

首先编辑该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> user20650..:

为了快速,您可以从ggpairs图创建一个网格对象.从?grid.grab帮助页面开始,它可能不如Roland编写新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))

在此输入图像描述

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有