如何提取ROC曲线的X-Y数值以使用ggplot绘制曲线?
提取ROC曲线X-Y数据并用ggplot绘制的方案
方案1:使用pROC内置的coords()函数(推荐)
pROC包自带的coords()函数可以直接提取ROC曲线上所有点的坐标及关联指标,步骤清晰且易用:
- 先将ROC对象保存为变量(避免直接调用plot):
library(pROC) # 生成并保存ROC对象 roc_obj <- roc(aSAH$outcome, aSAH$s100b, levels = c("Good", "Poor"))
- 提取完整坐标数据并整理:
# 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
相关产品推荐
相关产品推荐

