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

如何在R基础plot()函数中实现类似ggplot的position = "dodge"效果?

用R基础绘图实现cuminc曲线的分组避让(类似ggplot的position="dodge")

我明白你遇到的问题——ggcompetingrisks()的美学效果不符合需求,又没法直接用ggplot搭配cuminc(),只能靠基础绘图来实现分组曲线的避让。下面我给你一套手动实现的方案,核心思路是给不同组的x轴坐标添加偏移量,让曲线错开不重叠:

步骤1:准备数据与提取cuminc结果

首先确保你加载了cmprsk包,先获取cuminc()的输出对象。这里我用模拟数据做示例,你可以替换成自己的真实数据:

library(cmprsk)

# 模拟示例数据
set.seed(123)
time <- rexp(200)  # 生存时间
status <- sample(0:2, 200, replace = TRUE)  # 结局状态(0=删失,1/2=不同事件)
group <- factor(sample(c("对照组", "干预组"), 200, replace = TRUE))  # 分组变量

# 计算累积发生率
cm_obj <- cuminc(time = time, status = status, group = group)

步骤2:设置避让偏移量

我们需要给每个组的时间轴坐标添加一个小偏移,让曲线横向错开。偏移量的大小可以根据你的时间范围灵活调整:

# 选择要可视化的终点(比如第一个事件类型,对应cm_obj$`1`)
target_endpoint <- cm_obj$`1`
group_names <- names(target_endpoint$est)
n_groups <- length(group_names)

# 定义避让宽度(可根据x轴范围调整,比如时间范围大就调大一点)
dodge_width <- 0.03
# 生成每个组对应的偏移值,让各组居中分布
offsets <- seq(-(n_groups-1)*dodge_width/2, (n_groups-1)*dodge_width/2, by = dodge_width)

步骤3:用基础绘图实现避让效果

先初始化画布,再依次叠加各组曲线,每个组都加上对应的偏移量:

# 初始化绘图(先画第一组)
plot(
  x = target_endpoint$time + offsets[1],
  y = target_endpoint$est[[1]],
  type = "s",  # 阶梯线,符合累积发生率曲线的样式
  xlab = "随访时间",
  ylab = "累积发生率",
  ylim = c(0, max(unlist(target_endpoint$est))),  # 统一y轴范围
  col = "#1f77b4",  # 自定义颜色
  lwd = 2,
  main = "分组累积发生率曲线(基础绘图避让版)"
)

# 叠加其他组的曲线
for (i in 2:n_groups) {
  lines(
    x = target_endpoint$time + offsets[i],
    y = target_endpoint$est[[i]],
    type = "s",
    col = c("#ff7f0e")[i-1],  # 对应第二组的颜色
    lwd = 2
  )
}

# 添加网格(可选,提升可读性)
grid(lty = 2, col = "gray80")

# 添加图例
legend(
  "bottomright",
  legend = group_names,
  col = c("#1f77b4", "#ff7f0e"),
  lwd = 2,
  bty = "n"  # 去掉图例边框
)

关键细节说明

  • 偏移量dodge_width:如果你的时间轴范围很大(比如以年为单位,范围0-10),可以把这个值调到0.2左右,确保曲线明显错开但不违和;如果时间范围小,就用更小的值。
  • 多终点处理:如果要展示多个事件类型,你可以用不同的线型(lty参数)区分,或者分画布绘制。
  • 样式自定义:基础绘图的优势就是自由度高,你可以通过col、lwd、font等参数完全自定义图形美学,解决ggcompetingrisks()的样式问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:22:22