能否用patchwork将相关性图拼在一起?

编程语言 2026-07-12

我在R 中使用 corrplot 包创建了一些相关性图。现在我想把这些图合并成一个图。过去的其他图我使用过 patchwork 包,但发现对于corrplot来说,这并非开箱即用的。我知道保存一个corrplot并不会保存整张图,而是保存相关矩阵。因此,以下做法行不通:

library(corrplot)
library(patchwork)

M <- cor(mtcars)
testRes <- cor.mtest(mtcars, conf.level = 0.95)

p1 <- 
  corrplot(M, p.mat = testRes$p, method = 'color', order = 'hclust', 
           sig.level = c(0.001, 0.01, 0.05), pch.cex = 0.9,
           insig = 'label_sig', pch.col = 'grey20', col = rev(COL2('RdBu')))

p2 <- 
  corrplot(M, p.mat = testRes$p, method = 'color', order = 'hclust', 
           sig.level = c(0.001, 0.01, 0.05), pch.cex = 0.9,
           insig = 'label_sig', pch.col = 'grey20', col = rev(COL2('RdBu')))

(p1 | p2)

我知道 replayPlot() 的技巧可以重新显示corrplot,但不幸的是,它不能用来欺骗 patchwork

p1 <- {
  corrplot(M, p.mat = testRes$p, method = 'color', order = 'hclust', 
           sig.level = c(0.001, 0.01, 0.05), pch.cex = 0.9,
           insig = 'label_sig', pch.col = 'grey20', col = rev(COL2('RdBu')));
  recordPlot()
}

p2 <- {
  corrplot(M, p.mat = testRes$p, method = 'color', order = 'hclust', 
           sig.level = c(0.001, 0.01, 0.05), pch.cex = 0.9,
           insig = 'label_sig', pch.col = 'grey20', col = rev(COL2('RdBu')));
  recordPlot()
}

(replayPlot(p1) | replayPlot(p2))

是否有一个还算合理的方法来实现这个?这个问题纯粹在于这几个包的组合是否可行。我知道我可以在 ggplot2 中“自己”重新创建corrplot,然后把得到的图插入到 patchwork 中。不过,我很喜欢 corrplot 的功能(尤其是排序),我仍然希望不必从头开始构建整张图。

解决方案

看起来这无法实现。然而,{ggcorrplot} 包的设计就是为了模仿corrplot,并提供相同的格式选项。然后这些图就可以用 {patchwork} 进行堆叠。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章