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

如何在同一张图中绘制多个cmprsk包的cuminc对象?

问题:在同一张图中绘制多个cmprsk包的cuminc对象曲线

我有几个来自cmprsk包的cuminc对象,想要将它们绘制在同一张图中。但plot.cuminc似乎无法与lines函数配合使用,尝试了以下代码:

library(cmprsk)
data1<-data.frame(status=c(rep(0,20),rep(1,20),rep(2,20)),time=runif(n=60, min=1, max=20))

data2<-data.frame(status=c(rep(0,15),rep(1,35),rep(2,10)),time=runif(n=60, min=1, max=20))

a<-cuminc(data1$time,data1$status)
b<-cuminc(data2$time,data2$status)

plot(a[1])

lines(b[1])

运行后出现错误:

Error in xy.coords(x, y) :
'x' is a list, but does not have components 'x' and 'y'

我也尝试过使用ggcompetingrisks(a)和ggcompetingrisks(b),但无法将两条曲线放在同一张图中,只能用cowplot等工具将它们放在同一个大图的不同子图中。

补充:我已经可以通过tidycmprsk::cuminc结合tidy()将结果转为数据框后绘图,但希望能不使用该包和额外处理实现需求。


解决方案:直接从cuminc对象提取数据手动绘图

cuminc对象的每个事件类型对应一个子列表,里面包含time(时间点)和est(累积发生率)两个核心向量。我们可以直接提取这些向量,用基础R的plot和lines函数完成绘图:

library(cmprsk)
set.seed(123) # 设置随机种子保证结果可重复
data1<-data.frame(status=c(rep(0,20),rep(1,20),rep(2,20)),time=runif(n=60, min=1, max=20))
data2<-data.frame(status=c(rep(0,15),rep(1,35),rep(2,10)),time=runif(n=60, min=1, max=20))

# 生成cuminc对象
a<-cuminc(data1$time,data1$status)
b<-cuminc(data2$time,data2$status)

# 提取第一个事件(status=1)的时间和累积发生率数据
# 注意事件对应的名称是数字,需要用反引号包裹
a_time <- a$`1`$time
a_est <- a$`1`$est
b_time <- b$`1`$time
b_est <- b$`1`$est

# 绘制第一条曲线,同时设置坐标轴范围覆盖两条曲线的所有数据点
plot(a_time, a_est, type = "l", col = "blue", lwd = 2,
     xlab = "时间", ylab = "累积发生率",
     xlim = range(c(a_time, b_time)),  # x轴范围包含两个数据集的时间
     ylim = range(c(a_est, b_est)))    # y轴范围包含两个数据集的发生率

# 添加第二条曲线
lines(b_time, b_est, type = "l", col = "red", lwd = 2, lty = 2)

# 添加图例区分两条曲线
legend("topleft", legend = c("数据集1", "数据集2"),
       col = c("blue", "red"), lty = c(1, 2), lwd = 2)

关键说明:

  • a[1]返回的是一个子列表,而非lines能识别的x/y数据结构,所以必须直接提取子列表里的time和est向量。
  • 如果需要绘制其他事件(比如status=2),只需提取a$2$time、a$2$est对应的数据即可,重复lines步骤添加。
  • 设置xlim和ylim是为了确保两条曲线的所有数据点都能显示在图中,避免部分内容被截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:16:05