将Venn gList对象和网络图并排输出

5
我们如何在单个PDF页面上将网络图(igraph软件包绘图)和Venn图(VennDiagram gList对象)并排绘制?尝试了以下解决方案,但没有成功:
Plot gList side by side
Plot 2 tmap objects side-by-side
Side-by-side Venn diagram using Vennerable 。这里有一个示例,它将它们绘制在两个页面中。我使用grid.newpage()使其在单独的页面上绘制,否则它们会重叠在一起。
library(grid)
library(igraph)
library(VennDiagram)

#network graph object
relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David",
                               "David", "Esmeralda"),
                        to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"))
g <- graph_from_data_frame(relations, directed=TRUE)

# venn plot object
plotVenn <- venn.diagram(
  list(A = 1:150, B = 121:170),
  filename = NULL)
class(plotVenn)
# [1] "gList"

# output to PDF, outputs into 2 pages, I need 1 page 2 plots side-by-side
pdf("temp.pdf")

#network
igraph::plot.igraph(g)

#venn
grid.newpage()
grid.draw(plotVenn)

dev.off()

enter image description here


2
这里可能会有用:https://dev59.com/o5Dea4cB1Zd3GeqPaFSI - user20650
1
也许这个链接也有用:https://dev59.com/DIbca4cB1Zd3GeqPbd9B,将igraph绘图转换为grob。 - user20650
1
@user20650 好的,我认为这是你之前回答的重复。感谢你提供的链接。 - zx8754
2个回答

4
参考上述第一个链接,您可以通过使“常规” plot 和 grid 共存来“欺骗”自己摆脱困境。
pdf("temp.pdf", )
layout(matrix(1:2, nrow=1))
igraph::plot.igraph(g)
plot.new()
pushViewport(viewport(layout = grid.layout(1, 2, widths=unit(c(0.5, 0.5), "npc"))))
pushViewport(viewport(layout.pos.col = 2))
grid.draw(plotVenn)
popViewport(0)
dev.off()

enter image description here


3
我在评论中查看了下面的链接,提供以下解决方案: 如何在多个图中绘制Venn图
pdf("temp.pdf")

layout(matrix(1:2, 1, byrow = TRUE))
#network
igraph::plot.igraph(g)

#network
frame()
vps <- baseViewports()
pushViewport(vps$inner, vps$figure, vps$plot)
grid.draw(plotVenn)
popViewport(2)

dev.off()

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