在R的ggplot2/ggroc中设置不同线型失败,求解决方法
解决ggroc中scale_linetype_manual不生效的问题
问题核心是ggroc默认没有将线型(linetype)与曲线分组绑定,ggplot不知道要基于哪个变量分配线型,所以直接添加scale_linetype_manual不会生效。只需两步就能解决:
- 在
ggroc调用时,明确通过mapping参数将线型映射到曲线的分组变量; - 确保
scale_linetype_manual的参数顺序和颜色映射的标签对应。
同时修正原代码里的一处变量错误:truth_82 <- runif(10000)^1.21 < probs中的probs要改为probs_82,否则会报变量未定义的错误。
修改后的完整可运行代码:
library(pROC) library(ggplot2) # Example data # Perfect probs_1 <- seq(0, 1, length.out=10000) roc_perfect <- roc(probs_1, probs_1) # Random probs_1 <- rep(c(1, 0), 100) probs_2 <- c(rep(c(0, 1), 50), rep(c(1, 0), 50)) roc_random <- roc(probs_1, probs_2) # AUC = 82 set.seed(144) probs_82 <- seq(0, 1, length.out=10000) truth_82 <- runif(10000)^1.21 < probs_82 # 修正变量名错误 roc_82 <- roc(truth_82, probs_82) # Plot ROC curves pROC::ggroc(list(Perfect = roc_perfect, Model = roc_82, Random = roc_random), # 给列表命名,方便对应分组 legacy.axes = FALSE, linewidth = 0.4, mapping = aes(linetype = name)) + # 明确将线型映射到曲线名称 scale_linetype_manual("", labels = c("Perfect", "Model", "Random classification"), values = c(2, 1, 2)) + # 对应线型:虚线、实线、虚线 scale_colour_manual("", labels = c("Perfect", "Model", "Random classification"), values = c("gray", "green", "gray")) + theme_classic()
如果不想手动给列表命名,ggroc会自动给曲线分配默认名称(如"1""2""3"),只需保证scale_linetype_manual的values顺序和曲线生成顺序一致即可,但手动命名更清晰,便于后续维护。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

