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

ggplot2绘图:为ROC曲线与密度图设置左右不同Y轴

搞定ROC曲线与密度图的双Y轴布局问题

你已经成功把ROC曲线和两类样本的密度图放在同一张画布上了,现在就差调整轴的位置——让ROC的Y轴留在左侧,密度图的Y轴移到右侧。下面用ggplot2的双轴功能来实现这个需求,代码和细节说明都给你整理好了:

实现步骤

  1. 先读取数据并计算ROC对象,同时拆分两类样本的预测值用于密度图绘制
  2. 以ROC曲线作为基础图层,再叠加两类样本的密度图
  3. 关键是通过sec_axis()创建右侧Y轴,同时调整密度值的缩放比例,让它和左侧ROC的0-1轴范围适配
  4. 最后调整轴标签、颜色样式,让图表更清晰易读

完整可运行代码

library(ggplot2)
library(pROC)
library(dplyr)

# 读取数据
results <- read.csv(url("https://www.dropbox.com/s/at2f2zni7s1hnzm/results.csv?dl=1"))

# 生成ROC对象
roc_obj <- roc(results$testactual, results$pred)

# 拆分两类样本的预测值
data_0 <- results %>% filter(testactual == 0)
data_1 <- results %>% filter(testactual == 1)

# 计算密度图的Y轴范围,用来做缩放适配
dens_y_range <- range(c(density(data_0$pred)$y, density(data_1$pred)$y))
roc_y_range <- c(0, 1)
scale_factor <- diff(roc_y_range) / diff(dens_y_range)

# 绘制双轴图表
ggplot() +
  # 绘制ROC曲线,对应左侧Y轴(灵敏度)
  ggroc(roc_obj, aes(x = specificity, y = sensitivity)) +
  # 0类样本密度图,Y轴缩放后映射到右侧
  geom_density(data = data_0, 
               aes(x = pred, y = ..density.. * scale_factor), 
               color = "green") +
  # 1类样本密度图,同样缩放Y轴
  geom_density(data = data_1, 
               aes(x = pred, y = ..density.. * scale_factor), 
               color = "black") +
  # 设置主Y轴(左侧)和次Y轴(右侧)
  scale_y_continuous(
    name = "灵敏度 (ROC)",
    sec.axis = sec_axis(~ . / scale_factor, name = "密度")
  ) +
  # X轴设置(你提到可以自行调整0在左1在右,默认就是这个逻辑,如需反转可加scale_x_reverse())
  scale_x_continuous(name = "1 - 特异度") +
  theme_minimal() +
  # 给左右轴设置不同颜色,方便区分
  theme(
    axis.title.y = element_text(color = "#0072B2"),
    axis.text.y = element_text(color = "#0072B2"),
    axis.title.y.right = element_text(color = "#D55E00"),
    axis.text.y.right = element_text(color = "#D55E00")
  )

核心细节说明

  • 缩放比例计算:ROC的Y轴范围是0-1,而密度图的Y值通常更大,所以用scale_factor把密度值缩放到0-1区间,这样在右侧轴再反转缩放,就能显示真实的密度数值了
  • 双轴实现:通过scale_y_continuous()的sec.axis参数创建右侧轴,指定轴标签和数值转换规则
  • 视觉区分:给左右轴设置不同颜色,让用户一眼就能对应上各自的图表元素

这样调整后,就能完美实现你想要的布局——ROC曲线用左侧Y轴,密度图用右侧Y轴,同时保证图表的协调性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:24:36