如何将corrplot混合矩阵与ggplot2图形合并到同一面板?
解决基础绘图(corrplot叠加图)与ggplot2图形的面板合并问题
你已通过corrplot的add=TRUE参数叠加生成混合相关矩阵,希望用patchwork将其与ggplot2图形合并到同一面板。由于叠加后的基础图是一个整体,可通过以下步骤实现:
实现步骤
- 保留叠加后的完整基础图:你已用
recordPlot()将叠加后的混合矩阵保存为corHybridPlot,这一步确保两个corrplot的叠加效果被完整记录。 - 转换基础图为ggplot兼容对象:使用
ggplotify::as.ggplot()将记录的绘图对象转换为ggplot可识别的grob,使其能被patchwork处理。 - 用patchwork合并图形:直接使用patchwork的拼接语法(如
|横向拼接、/纵向拼接)组合转换后的图与ggplot2图形。
完整代码示例
library(tidyverse) library(corrplot) library(patchwork) library(ggplotify) # 需加载该包实现格式转换 data(mtcars) # 生成混合相关矩阵 M32 <- cor(mtcars) M21 <- cor(mtcars[-c(3, 8, 9, 18, 19, 20, 21, 26, 27, 28, 32), ]) corrplot::corrplot(M32, method = "color", type = "lower", order = "original", hclust.method = "ward.D2", col = COL2('PiYG'), tl.pos = "lt", is.corr = FALSE, diag = TRUE, tl.col = "black", addrect = 2, rect.col = "black", addCoef.col = "white", cl.cex = 0.8, cl.align.text = 'l', cl.pos = "b", number.cex = 0.75 ) corrplot::corrplot(M21, method = "color", type = "upper", order = "original", add = TRUE, hclust.method = "ward.D2", col = COL2('PiYG'), tl.pos = "n", is.corr = FALSE, diag = TRUE, tl.col = "black", addrect = 2, rect.col = "black", addCoef.col = "white", cl.cex = 0.8, cl.align.text = 'l', cl.pos = "n", number.cex = 0.75 ) corHybridPlot <- recordPlot() # 生成ggplot2图形 p1 <- ggplot(mtcars, aes(wt, mpg)) + geom_point(color = "red") + geom_text(aes(label = rownames(mtcars))) + theme_classic(base_size = 16) # 转换基础图并合并 cor_gg <- as.ggplot(corHybridPlot) # 横向拼接示例,可替换为 / 实现纵向拼接 cor_gg | p1 # 可选:调整布局比例并添加标题 cor_gg + p1 + plot_layout(widths = c(2,1)) + plot_annotation(title = "混合相关矩阵与散点图")
注意事项
- 运行
recordPlot()前,确保两个corrplot的叠加效果已正确显示在绘图设备中,不要提前关闭设备。 - 若转换后图形排版失衡,可通过
plot_layout()调整面板比例,比如plot_layout(widths = c(2,1))设置两个面板的宽度比。
内容的提问来源于stack exchange,提问作者doctorate
相关产品推荐
相关产品推荐

