维恩图在多图中的运用

4
有没有办法在下面的两个直方图之后将以下维恩图作为第三个图形呈现?我希望将两个维恩图放置在彼此上方。
library(VennDiagram)

plus.venn<-draw.pairwise.venn(368, 1171, 149) #venn diagram 1

minus.venn<-draw.pairwise.venn(349, 1335, 173) #venn diagram 2

par(mfrow=c(1,3))

a<-sample(1:10000,3000)

b<-sample(5000:15000,3000)

hist(a)

hist(b)

1
draw.pariwise.venn似乎使用grid图形,而hist则使用基本图形。将两者混合在一起并不好玩。你能否用ggplot2lattice创建一个适用于grid的直方图呢? - MrFlick
好的...事实上,我并不确定哪种方法是实现这个目标的最佳方式... - user3240953
2
如果你想要将venndaigram(网格图形)和hist plots(基础图形)结合起来,你可以使用gridBase包(一个例子在这里)。但是如果你遵循MrFlick的建议,使用grid来绘制所有的图形,你可能会得到更好看的图形。 - user20650
1个回答

10

在上面MrFlicks和我发表的评论的基础上进行扩展。

你可以使用gridBase软件包结合基本图形和网格图形。然而,如果你不受限于使用基本的R语言图形,你可能会发现使用基于网格的绘图包生成所有的图形并使用gridExtra包组合它们更容易。

你的数据

library(VennDiagram)

plus.venn <- draw.pairwise.venn(368, 1171, 149) #venn diagram 1
minus.venn <-draw.pairwise.venn(349, 1335, 173) #venn diagram 2
a <-sample(1:10000,3000)
b <-sample(5000:15000,3000)

排列基础图和网格图

library(grid)
library(gridBase)

# Layout of plots - 4 plots of equal size
layout(matrix(1:4, 2, byrow = TRUE))

# First & second base plot
hist(a)
hist(b)

# Grid regions of current base plot (ie from frame)
frame()
vps <- baseViewports()
pushViewport(vps$inner, vps$figure, vps$plot)
grid.draw(plus.venn)
popViewport(3)

# fourth
frame()
vps <- baseViewports()
pushViewport(vps$inner, vps$figure, vps$plot)  
grid.draw(minus.venn)
popViewport(3)

产生哪一种

在此输入图像描述

或者使用 ggplot2 生成您的直方图并使用 grid.arrange 进行组合

library(ggplot2)
library(gridExtra)

grid.arrange(qplot(a, geom="histogram") + theme_classic(),
             qplot(b, geom="histogram") + theme_classic(),
             grobTree(plus.venn),
             grobTree(minus.venn),
             ncol=2)

哪种方法可以产生以下结果:

在此输入图片描述

您可以将任一方法的布局更改为所需的样式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接