R中如何在同一窗口绘制多个不同尺寸的ggraph网络图?
解决方案
你之前的尝试出现问题的核心原因是参数和布局结构不匹配:
- 使用
grid.arrange时你指定了1行3列的布局,但传入了3个高度值,实际上单行布局仅会读取第一个高度参数,导致所有图片高度一致 - 使用
plot_grid时你指定了2列布局,但传入了3个宽度/高度值,参数和实际行列数不对应,导致比例失效
推荐优先使用patchwork包实现该需求,它是目前ggplot生态下最灵活的拼图工具,以下是不同需求对应的实现方案:
方案1:一行排列,宽度比例1:0.5:0.25
如果需要三个图在同一行,仅宽度按比例缩放、高度一致,代码如下:
library(patchwork) allPlots[[1]] + allPlots[[2]] + allPlots[[3]] + plot_layout(nrow = 1, widths = c(1, 0.5, 0.25))
方案2:匹配示例图的阶梯布局
如果需要第一个图占满左侧区域,右侧上下排列第二、第三个图,尺寸比例符合你要求的1:1/2:1/4,代码如下:
library(patchwork) # 定义布局:A为第一个图,占左列2行;B、C分别为第二、第三个图,占右列上下两行 layout <- " AA BC " allPlots[[1]] + allPlots[[2]] + allPlots[[3]] + plot_layout(design = layout, widths = c(2, 1), heights = c(2, 1))
方案3:修正你的gridExtra代码
如果你要继续使用gridExtra,只需要修正参数匹配即可:
# 一行三列布局 grid.arrange( grobs = allPlots, widths = c(1, 0.5, 0.25), nrow = 1 ) # 阶梯布局 grid.arrange( grobs = allPlots, widths = c(2, 1), heights = c(2, 1), layout_matrix = rbind(c(1, 2), c(1, 3)) )
方案4:修正你的cowplot代码
使用cowplot嵌套调用也可以实现:
# 一行三列布局 plot_grid(plotlist = allPlots, nrow = 1, rel_widths = c(1, 0.5, 0.25)) # 阶梯布局 right_col <- plot_grid(allPlots[[2]], allPlots[[3]], ncol = 1, rel_heights = c(2, 1)) plot_grid(allPlots[[1]], right_col, ncol = 2, rel_widths = c(2, 1))
内容的提问来源于stack exchange,提问作者Electrino
相关产品推荐
相关产品推荐

