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

如何修改cutpointr生成的gtable绘图对象的图例?

修改cutpointr绘图的图例标题与标签

问题概述

使用cutpointr生成连续变量截断值后,plot()返回的是复杂的gtable对象,无法直接用ggplot2的scale_*系列函数修改图例。需要完成以下调整:

  • 将图例标题从subgroup改为Oocyte source
  • 将图例标签edet替换为Donor,ivfet替换为Autologous

解决方案

方法1:提取并修改内嵌的ggplot组件

cutpointr的绘图由多个ggplot对象组合成gtable,可提取核心ggplot组件修改后替换原内容:

# 获取绘图的gtable对象
p <- plot(opt_cut_b_cycle.type)

# 提取第一个ggplot组件(若结构有差异,可通过str(p)查看索引调整)
gg_component <- p$grobs[[1]]$children[[1]]

# 修改图例标题与标签
gg_component <- gg_component +
  scale_fill_discrete(name = "Oocyte source", labels = c("Donor", "Autologous")) +
  scale_color_discrete(name = "Oocyte source", labels = c("Donor", "Autologous"))

# 替换原组件并绘制
p$grobs[[1]]$children[[1]] <- gg_component
plot(p)

方法2:手动构建自定义ggplot(推荐)

直接利用cutpointr输出的结果数据,完全自定义绘图样式,灵活性更高且无需依赖gtable结构:

library(dplyr)
library(ggplot2)

# 预处理ROC曲线数据,替换分组标签
roc_data <- opt_cut_b_cycle.type$roc_curve %>%
  mutate(subgroup = recode(subgroup, 
                           "edet" = "Donor", 
                           "ivfet" = "Autologous"))

# 提取最优截断点数据并替换标签
cutpoint_data <- opt_cut_b_cycle.type %>%
  mutate(subgroup = recode(subgroup, 
                           "edet" = "Donor", 
                           "ivfet" = "Autologous"))

# 绘制匹配cutpointr风格的ROC曲线
ggplot(roc_data, aes(x = 1 - specificity, y = sensitivity, color = subgroup)) +
  geom_line(linewidth = 1) +
  geom_point(data = cutpoint_data, 
             aes(x = 1 - specificity_opt, y = sensitivity_opt), 
             size = 3, shape = 19) +
  labs(x = "1 - Specificity", y = "Sensitivity", color = "Oocyte source") +
  scale_color_manual(values = c("#F8766D", "#00BFC4")) # 匹配cutpointr默认配色

方法3:直接修改gtable的图例文本

遍历gtable中的所有元素,定位图例文本并直接替换内容:

p <- plot(opt_cut_b_cycle.type)

# 遍历所有grobs元素,修改图例标题与标签
for (grob in p$grobs) {
  if (!is.null(grob$label)) {
    # 修改图例标题
    if (grob$label == "subgroup") {
      grob$label <- "Oocyte source"
    }
    # 修改图例标签
    grob$label <- dplyr::recode(grob$label, 
                                "edet" = "Donor", 
                                "ivfet" = "Autologous")
  }
}

# 绘制修改后的图形
plot(p)

注意事项

  • cutpointr的plot()输出结构可能随版本更新变化,方法1和3需根据实际gtable结构调整索引或匹配条件
  • 方法2无需依赖gtable结构,自定义程度高,适合需要长期维护的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:25:24