R语言ROC多图保存为PDF时坐标轴异常问题求助
解决方案
修正后的代码
# 移除无效的knitr配置(仅对Rmarkdown生效,本地绘图无需设置) # knitr::opts_chunk$set(dev = "tiff", dpi = 500) # 精确设置PDF宽度为255pts(1英寸=72pts,转换为英寸单位传入) pdf("ROCplots.pdf", width = 255/72, height = 2) # height可根据需求自行调整 # 调整图形边距(给大字号标题留出空间),同时设置1行2列布局 par(mfrow = c(1,2), mar = c(5, 5, 5, 2) + 0.1) # ROC图1 roc(na.exclude(Data$Disease), glmbas$fitted.values, plot = TRUE, legacy.axes = FALSE, percent = TRUE, col = "skyblue3", lty = "solid", lwd = 2, print.auc = FALSE, # 自定义X轴:刻度位置0-100,标签反向显示100-0(间隔20,对应Specificity %) axis = list(side = 1, at = seq(0, 100, 20), labels = seq(100, 0, 20)), # 自定义Y轴:0-100,间隔20 axis = list(side = 2, at = seq(0, 100, 20))) # 添加第二条ROC曲线 plot.roc(na.exclude(Data$Disease), glmadv$fitted.values, percent = TRUE, col = "skyblue3", lty = "longdash", lwd = 2, print.auc = FALSE, add = TRUE) legend("bottomright", c("Adv 1 (AUC = 0.89)", "Bas 1 (AUC = 0.81)"), col = c("skyblue3", "skyblue3"), lty = c("longdash", "solid"), lwd = 2, cex = 0.45) title(main = "A) Bas-Adv 1", line = 3.5, cex = 4) # 调整标题位置避免遮挡图形 # ROC图2 roc(na.exclude(Data$Disease), glmbas4$fitted.values, plot = TRUE, legacy.axes = FALSE, percent = TRUE, col = "skyblue3", lty = "solid", lwd = 2, print.auc = FALSE, axis = list(side = 1, at = seq(0, 100, 20), labels = seq(100, 0, 20)), axis = list(side = 2, at = seq(0, 100, 20))) plot.roc(na.exclude(Data$Disease), glmadv4$fitted.values, percent = TRUE, col = "skyblue3", lty = "longdash", lwd = 2, print.auc = FALSE, add = TRUE) legend("bottomright", c("Adv 4 (AUC = 0.83)", "bas 4 (AUC = 0.73)"), col = c("skyblue3", "skyblue3"), lty = c("longdash", "solid"), lwd = 2, cex = 0.45) title(main = "B)Bas-Adv 4", line = 3.5, cex = 4) dev.off()
核心调整说明
- 删除无效配置:
knitr::opts_chunk$set仅针对Rmarkdown文档,本地绘图时会干扰设备设置,直接移除。 - 精确PDF宽度:PDF的
width参数单位是英寸,通过255/72将pts转换为英寸,确保宽度严格符合要求。 - 修复坐标轴挤压:标题
cex=4字号过大,默认边距会挤压坐标轴,通过par(mar = c(5,5,5,2)+0.1)增大顶部边距,同时调整title()的line参数,避免标题遮挡图形。 - 强制坐标轴刻度:在
roc()函数中通过axis参数指定刻度规则,实现X轴100到0反向显示、Y轴0到100间隔20的需求。
扩展:保存为JPEG格式
若需保存JPEG,只需替换pdf()为jpeg(),直接用pts单位设置尺寸:
jpeg("ROCplots.jpg", width=255, height=180, units="pt", res=300) # 后续绘图代码同上 dev.off()
内容的提问来源于stack exchange,提问作者Kierrajames
相关产品推荐
相关产品推荐

