如何通过Cowplot :: plot_grid将用igraph生成的图和用ggplot2绘制的图合并

时间:2019-07-16 12:59:36

标签: r ggplot2 igraph cowplot

最初,我无法完全绘制它,这意味着我无法找到一种方法来捕获绘制对象并将其提供给cowplot::plot_grid。现在,我找到了一种解决方法,可以将图形图的图像另存为png并使用cowplot::draw_image进行读取。有更简单的方法吗?同样,很难设置png的参数以具有良好的分辨率和大小并避免边距修整。我还需要对图形进行一些调整,例如 ,应该可以使用自环和带有精确连接权值的有向箭头。

下面,有两个选项以及我获得的各自结果。

library(ggplot2); library(cowplot); library(igraph)
graph_1 <- sample_gnm(10, 25, directed = T, loops = T)
gg_test <- ggplot(data.frame("a" = seq(1, 5, length.out = 10), "b" = runif(10)), aes(x=a, y=b)) + geom_point() + theme_classic()

选项1-直接

# option 1 - empty graph
cowplot::plot_grid(plot(graph_1), gg_test)

opt1

选项2-提交

# option 2 - working but horrible code and difficult setting of the resolution/size (r-base not the best)
png("to_delete_for_import.png", res = 150, height = 800, width = 1100)
plot(graph_1, edge.label = LETTERS[1:10], vertex.color = RColorBrewer::brewer.pal(10, "Spectral"))
dev.off()
graph_1_cwpl <- ggdraw() + draw_image("to_delete_for_import.png")
file.remove("to_delete_for_import.png")
cowplot::plot_grid(graph_1_cwpl, gg_test)

opt2

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题,并发现以下解决方案会有所帮助。第一种方法类似于@January用户已经评论的内容:

library(ggplotify) 
E(graph_1)$label <- ""
plot_grid(base2grob(~plot(graph_1)),
          gg_test)

enter image description here

这是使用ggraph的第二种方法:

library(ggraph)
ggtest2 <- ggraph(graph_1) +
          geom_node_point() +
          geom_edge_link() +
          theme_classic()

plot_grid(ggtest2, gg_test)

enter image description here