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

如何提取ROC曲线的X-Y数值以使用ggplot绘制曲线?

提取ROC曲线X-Y数据并用ggplot绘制的方案

方案1:使用pROC内置的coords()函数(推荐)

pROC包自带的coords()函数可以直接提取ROC曲线上所有点的坐标及关联指标,步骤清晰且易用:

  1. 先将ROC对象保存为变量(避免直接调用plot):
library(pROC)
# 生成并保存ROC对象
roc_obj <- roc(aSAH$outcome, aSAH$s100b, levels = c("Good", "Poor"))
  1. 提取完整坐标数据并整理:
# transpose=TRUE将结果转为数据框格式,方便后续处理
roc_data <- coords(roc_obj, "all", transpose = TRUE)
roc_data_df <- as.data.frame(roc_data)
# 计算ROC曲线的X轴(1-特异性)
roc_data_df$x <- 1 - roc_data_df$specificity
# Y轴直接用灵敏度
roc_data_df$y <- roc_data_df$sensitivity

方案2:直接提取ROC对象的内置元素

roc对象本身就存储了灵敏度和特异性的向量,直接提取组合成数据框即可:

# 生成ROC对象
roc_obj <- roc(aSAH$outcome, aSAH$s100b, levels = c("Good", "Poor"))
# 提取核心坐标数据并组合
roc_data_df <- data.frame(
  x = 1 - roc_obj$specificities,
  y = roc_obj$sensitivities
)

用ggplot绘制自定义ROC曲线

拿到整理好的数据框后,就可以自由定制样式了,示例代码:

library(ggplot2)
ggplot(roc_data_df, aes(x = x, y = y)) +
  geom_line(color = "#2E8B57", linewidth = 1.2) +
  # 添加AUC=0.5的参考对角线
  geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "#696969") +
  # 设置坐标轴与标题
  labs(
    x = "1 - 特异性(假阳性率)",
    y = "灵敏度(真阳性率)",
    title = "aSAH患者S100B指标的ROC曲线"
  ) +
  # 限定坐标范围(ROC曲线在[0,1]区间)
  xlim(0, 1) +
  ylim(0, 1) +
  # 调整主题样式
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

说明:方案1会额外输出阈值、准确率等指标,适合需要同步分析最优阈值的场景;方案2更简洁,仅提取核心坐标数据,满足纯绘图需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:04:59