You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:34:57