Вывод объекта Venn gList и графика сети рядом друг с другом

Как мы можем построить график сети (график пакета igraph) и диаграмму Венна (объект gList VennDiagram) бок о бок на одной странице PDF?

Пытался следовать приведенным ниже решениям, но это не сработало:
Plot gList рядом
Участок 2 объектов tmap рядом
Side-by- боковая диаграмма Венна с использованием 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()

введите здесь описание изображения


person zx8754    schedule 24.11.2016    source источник
comment
возможно, также полезно: /27929452/, чтобы преобразовать график igraph в grob   -  person user20650    schedule 24.11.2016
comment
@ user20650 Хорошо, я думаю, что это обман ваших предыдущих ответов. Спасибо вам за ссылки.   -  person zx8754    schedule 24.11.2016


Ответы (2)


Вдохновившись первой ссылкой выше, вы можете «обмануть» свой выход, заставив сосуществовать «обычные» 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()

введите здесь описание изображения

person Cath    schedule 24.11.2016

Придумал решение ниже, следуя ссылкам в комментариях: Диаграммы Венна в нескольких фигурах

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()
person Community    schedule 24.11.2016