如何为含多条ROC曲线的ggroc绘图适配annotate文本标注命令?
给多条ROC曲线添加对应统计信息的解决方案
针对你用ggroc绘制两条ROC曲线的场景,有两种实用方法可以给每条曲线添加对应的loss、accuracy、AUC信息:
方法一:多次调用annotate分别标注
直接为每条曲线单独调用annotate,通过调整x和y参数设置不同的标注位置,避免重叠。假设out1对应第一条曲线(sc1)的统计结果,out2对应第二条曲线(sc2)的统计结果,代码示例如下:
rocobj <- pred1 rocobj1 <- pred2 # 绘制ROC曲线并添加两条曲线的标注 ggroc(list(sc1 = rocobj, sc2 = rocobj1)) + # 标注第一条曲线的信息,位置(0.15, 0.1) annotate("text", x = 0.15, y = 0.1, label = paste0("sc1\nloss: ", out1[[2]][1], "\naccuracy: ", out1[[2]][2], "\nAUC: ", out1[[2]][3])) + # 标注第二条曲线的信息,位置(0.15, 0.2)(与第一条错开) annotate("text", x = 0.15, y = 0.2, label = paste0("sc2\nloss: ", out2[[2]][1], "\naccuracy: ", out2[[2]][2], "\nAUC: ", out2[[2]][3]))
方法二:用数据框+geom_text实现关联标注
这种方法可以让标注颜色和对应曲线保持一致,更直观。先把两条曲线的统计信息整理成数据框,再通过geom_text映射到图中:
rocobj <- pred1 rocobj1 <- pred2 # 整理两条曲线的统计信息为数据框 stats_df <- data.frame( group = c("sc1", "sc2"), # 对应ggroc中的曲线名称 x = c(0.15, 0.3), # 可以设置不同的x位置避免重叠 y = c(0.1, 0.1), label = c( paste0("loss: ", out1[[2]][1], "\naccuracy: ", out1[[2]][2], "\nAUC: ", out1[[2]][3]), paste0("loss: ", out2[[2]][1], "\naccuracy: ", out2[[2]][2], "\nAUC: ", out2[[2]][3]) ) ) # 绘图并添加关联标注 ggroc(list(sc1 = rocobj, sc2 = rocobj1)) + geom_text(data = stats_df, aes(x = x, y = y, label = label, color = group), hjust = 0, vjust = 1, show.legend = FALSE)
注意事项
- 根据你的图布局调整
x和y的数值,确保标注不会遮挡曲线或互相重叠; - 如果你的统计结果存储结构和示例中的
out1、out2不同,替换成实际的变量名即可; - 方法二中的
show.legend = FALSE可以避免标注额外生成图例,保持图面整洁。
内容的提问来源于stack exchange,提问作者user21573410
相关产品推荐
相关产品推荐

