R语言corrplot绘图结果赋值给变量返回NULL问题咨询
问题根因
两个设计层面的原因导致赋值结果不符合预期:
corrplot()是R基础绘图体系的函数,设计逻辑是直接把图形输出到当前绘图设备,不会把图形本身作为返回值。函数运行后返回的是绘图用的配置参数列表,也就是你注释里提到的“去掉my.theme之后拿到的list”,这个列表不是可复用的绘图对象。- 代码里用
+拼接my.theme属于语法错配:+叠加主题、图层是ggplot2体系的专属语法,corrplot输出的内容不是ggplot对象,根本不支持这种操作,运行到这一步会直接触发运算错误,最终赋值结果就变成了NULL。
解决方案
根据你的使用场景二选一即可:
不需要和ggplot/ggpubr图形拼版
直接在corrplot()绘图完成后,用recordPlot()捕获当前绘图设备上的图形存为变量,后续调用变量即可重绘图形,不要在corrplot后面用+加任何ggplot相关元素:
# 先执行绘图 corrplot(res_pearson.c_setosa$r[,1:3], type="lower", order="original", p.mat = res_pearson.c_setosa$p[,1:3], sig.level = 0.05, insig = "blank", col=col4(10), tl.pos = "ld", tl.cex = .8, tl.srt=45, tl.col = "black", cl.cex = .8) # 捕获已绘制的图形存为变量 corr.a <- recordPlot()
需要叠加自定义ggplot主题、或者要和ggpubr产出的图拼版
corrplot本身不兼容ggplot语法,两种处理方式:
- 换用ggplot体系的相关性绘图函数
ggcorrplot实现完全一致的效果,产出的是标准ggplot对象,既支持+叠加主题,也可以直接传入ggpubr的拼版函数:
library(ggcorrplot) corr.a <- ggcorrplot(res_pearson.c_setosa$r[,1:3], type = "lower", p.mat = res_pearson.c_setosa$p[,1:3], sig.level = 0.05, insig = "blank", colors = col4(10)[c(1,6,10)], tl.cex = 0.8, tl.srt = 45, tl.col = "black", legend.title = "Corr") + my.theme # 此处可正常叠加自定义主题
- 如果一定要保留原生corrplot的视觉效果,就用第一种方法存好
recordPlot()捕获的对象,再用拼版包支持base plot的语法把对象转成兼容格式后拼版即可。
内容的提问来源于stack exchange,提问作者Rosario
相关产品推荐
相关产品推荐

