保存相关性图表时的维度问题求助
解决相关性图表保存丢失维度的问题
我懂你这种困惑——之前用ggplot2存图一直顺顺当当,结果换成基础绘图画相关矩阵,存成PDF就丢维度了,大概率是绘图设备初始化和par参数设置的顺序搞反了。基础绘图系统的逻辑和ggplot2不一样:得先打开绘图设备,再设置par的布局参数,不然par的那些边距、轴缩放设置根本不会被设备正确识别。
给你调整后的可运行代码示例:
# 先定义你的相关矩阵 cor.matrix <- structure(c(1, 0.492955134006126, 0.506712693586509, 0.492955134006126, 1, 0.467841635024973, 0.506712693586509, 0.467841635024973, 1), .Dim = c(3L, 3L), .Dimnames = list(c("(0)0003", "(0)0005", "(0)0006"), c("(0)0003", "(0)0005","(0)0006"))) # 第一步:先打开cairo_pdf设备,务必明确指定宽高(避免自适应出问题) cairo_pdf("Test.pdf", width = 8, height = 6) # 第二步:这时候再设置par参数,才会作用于当前打开的PDF设备 par(oma=c(6,3,4,3), cex.axis = 0.9, mar = c(3,5,3,2), mgp = c(1,0.4,0)) # 第三步:绘制你的相关性矩阵图表(这里用corrplot举例子,替换成你实际的绘图代码就行) library(corrplot) corrplot(cor.matrix, method = "circle", tl.cex = 0.9) # 第四步:一定要记得关闭设备!不然PDF会损坏或者内容不完整 dev.off()
另外还有几个踩过的坑要提醒你:
- 如果用
heatmap()这类函数,它会自动重置par参数,要么绘图后重新设置par,要么加heatmap(..., keep.dendro = FALSE)这类参数避免干扰布局 - 别依赖PDF的默认宽高,明确指定width和height能帮你精准控制图表维度
- 检查有没有忘记关之前的绘图设备(比如之前跑代码没执行dev.off()),多个设备同时存在会导致参数冲突
要是还是有问题,可以先换成基础的pdf()函数测试,排除cairo设备的兼容性问题。
内容的提问来源于stack exchange,提问作者theBotelho
相关产品推荐
相关产品推荐

