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

如何将pROC生成的ROC曲线保存为.svg或.ai可编辑格式?

如何不修改现有pROC绘图代码保存为可编辑SVG/AI格式?

问题背景

需向期刊提交pROC包生成的ROC图,要求提供.svg或.ai格式的可编辑文件。此前通过右键保存的.png格式不符合要求,尝试用ggsave(device = "svg")保存时出现如下报错:

Error in UseMethod("grid.draw") :
no applicable method for 'grid.draw' applied to an object of class "roc"

现有绘图代码如下:

library(pROC)

par(pty="s")

r_lda = roc(crs$CRS, crs$tbscore_corr_lda_inv_crs)
r_cf1 = roc(crs$CRS, crs$cf1_inv)
r_cf3 = roc(crs$CRS, crs$cf3_inv)
r_gbp5 = roc(crs$CRS, crs$gbp5_inv)
r_dusp3 = roc(crs$CRS, crs$dusp3_inv)

multiple <- plot.roc(r_lda, print.auc=TRUE, auc.polygon=TRUE, auc.polygon.col = "#FFEBEE",print.thres=FALSE,
                     col=pal_pro[1], print.auc.y=0.50, print.auc.x=0.40, xlim = c(1.1,0))
multiple <- plot.roc(r_cf1, print.auc=TRUE, auc.polygon=FALSE,col=pal_pro[2], add=TRUE, print.auc.y=0.40, print.auc.x=0.40, xlim = c(1.2,0), ylim = c(0,1.2))
multiple <- plot.roc(r_gbp5, print.auc=TRUE, auc.polygon=FALSE,col=pal_pro[3], add=TRUE, print.auc.y=0.30, print.auc.x=0.40, xlim = c(1.2,0), ylim = c(0,1.2))
multiple <- plot.roc(r_dusp3, print.auc=TRUE, auc.polygon=FALSE,col=pal_pro[4], add=TRUE, print.auc.y=0.20, print.auc.x=0.40, xlim = c(1.2,0), ylim = c(0,1.2))

legend("bottom",
       legend=c("TB score", "KLF2", "GBP5", "DUSP3"),
       col=pal_pro,
       lwd=6, cex =0.5, xpd = TRUE, horiz = TRUE)
text(0.2, 0.65, "TB score",col=pal_pro[1], font=2)
text(0.5, 0.45, "KLF2",col=pal_pro[2])
text(0.8, 0.7, "GBP5",col=pal_pro[3])
text(0.55, 0.9, "DUSP3",col=pal_pro[4])

解决方案(无需修改现有绘图逻辑)

你使用的是R基础绘图系统生成的ROC图,而ggsave仅适配ggplot2图形,因此会报错。可以通过基础绘图的设备函数直接导出SVG,操作步骤如下:

  1. 在绘图代码开头添加SVG设备启动命令,可自行调整width和height参数适配你的图:
    svg("roc_plot.svg", width = 8, height = 8)
    
  2. 保留原有的所有绘图代码(从par(pty="s")到最后一行text())
  3. 在绘图代码末尾添加关闭设备的命令:
    dev.off()
    

完整示例代码:

library(pROC)

# 启动SVG设备
svg("roc_plot.svg", width = 8, height = 8)

par(pty="s")

r_lda = roc(crs$CRS, crs$tbscore_corr_lda_inv_crs)
r_cf1 = roc(crs$CRS, crs$cf1_inv)
r_cf3 = roc(crs$CRS, crs$cf3_inv)
r_gbp5 = roc(crs$CRS, crs$gbp5_inv)
r_dusp3 = roc(crs$CRS, crs$dusp3_inv)

multiple <- plot.roc(r_lda, print.auc=TRUE, auc.polygon=TRUE, auc.polygon.col = "#FFEBEE",print.thres=FALSE,
                     col=pal_pro[1], print.auc.y=0.50, print.auc.x=0.40, xlim = c(1.1,0))
multiple <- plot.roc(r_cf1, print.auc=TRUE, auc.polygon=FALSE,col=pal_pro[2], add=TRUE, print.auc.y=0.40, print.auc.x=0.40, xlim = c(1.2,0), ylim = c(0,1.2))
multiple <- plot.roc(r_gbp5, print.auc=TRUE, auc.polygon=FALSE,col=pal_pro[3], add=TRUE, print.auc.y=0.30, print.auc.x=0.40, xlim = c(1.2,0), ylim = c(0,1.2))
multiple <- plot.roc(r_dusp3, print.auc=TRUE, auc.polygon=FALSE,col=pal_pro[4], add=TRUE, print.auc.y=0.20, print.auc.x=0.40, xlim = c(1.2,0), ylim = c(0,1.2))

legend("bottom",
       legend=c("TB score", "KLF2", "GBP5", "DUSP3"),
       col=pal_pro,
       lwd=6, cex =0.5, xpd = TRUE, horiz = TRUE)
text(0.2, 0.65, "TB score",col=pal_pro[1], font=2)
text(0.5, 0.45, "KLF2",col=pal_pro[2])
text(0.8, 0.7, "GBP5",col=pal_pro[3])
text(0.55, 0.9, "DUSP3",col=pal_pro[4])

# 关闭设备
dev.off()
  • 导出的roc_plot.svg为可编辑矢量格式,满足期刊要求。
  • 若需要.ai格式,可将导出的SVG文件用Adobe Illustrator打开后直接保存为.ai格式即可。

注意:如果图中使用了特殊字体,导出SVG后在Illustrator中可能需要重新设置字体,避免显示异常。


内容的提问来源于stack exchange,提问作者llarsson3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:53:22