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

在R的ggplot2/ggroc中设置不同线型失败,求解决方法

解决ggroc中scale_linetype_manual不生效的问题

问题核心是ggroc默认没有将线型(linetype)与曲线分组绑定,ggplot不知道要基于哪个变量分配线型,所以直接添加scale_linetype_manual不会生效。只需两步就能解决:

  1. 在ggroc调用时,明确通过mapping参数将线型映射到曲线的分组变量;
  2. 确保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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:57:04