这是我想要执行的代码的可重复示例:
library(survival)
library(survminer)
km.fit <- survfit(Surv(rfstime, status) ~ 1, data = gbsg)
ggsurvplot(km.fit, fun = function(x) 1-x, data = gbsg, censor = FALSE, conf.int = TRUE,
risk.table = TRUE, cumevents = TRUE, ylab = "Cumulative Incidence",
surv.median.line = "hv")
此代码不起作用,并给出以下错误消息:
Error in match(x, table, nomatch = 0L) :
'match' requires vector arguments
我想要的是以下代码产生的结果,但添加了中线:
ggsurvplot(km.fit, fun = function(x) 1-x, data = gbsg, censor = FALSE, conf.int = TRUE,
risk.table = TRUE, cumevents = TRUE, ylab = "Cumulative Incidence")
我发现我收到了前面提到的错误,因为调用函数时
surv.median.line
不起作用。但是,我确实需要将其绘制为累积发生率,而不是生存率,因此该函数是必要的。
推荐的解决方法是尝试在 ggplot 中手动绘制中线,一旦我将此 ggplot 对象保存到变量并按以下方式调用它,我就可以这样做:
myplot <- ggsurvplot(km.fit, fun = function(x) 1-x, data = gbsg, censor = FALSE, conf.int = TRUE,
risk.table = TRUE, cumevents = TRUE, ylab = "Cumulative Incidence")
myplot$plot +
geom_segment(aes(x = 0, xend = 1810, y = 0.5, yend = 0.5), linetype = "dashed") +
geom_segment(aes(x = 1810, xend = 1810, y = 0, yend = 0.5), linetype = "dashed")
但是,现在的问题是我看不到风险表和累积发生率表了;我只有情节。我确实需要这些表格,如果我必须将它们打印出来并以某种方式单独管理它们,则会带来很多困难。
有什么建议吗?如何将我想要的所有内容(累积发生率图、中线和表格)全部集中在一个图中?这可能吗,还是我运气不好?
问题是您操纵了绘图,但没有将其分配回
ggsurvplot
对象,即执行 myplot$plot <- myplot$plot + ...
。然后打印 myplot
以获得得出风险表的生存曲线图:
library(survival)
library(survminer)
km.fit <- survfit(Surv(rfstime, status) ~ 1, data = gbsg)
myplot <- ggsurvplot(km.fit,
fun = function(x) 1 - x, data = gbsg, censor = FALSE, conf.int = TRUE,
risk.table = TRUE, cumevents = TRUE, ylab = "Cumulative Incidence"
)
myplot$plot <- myplot$plot +
geom_segment(aes(x = 0, xend = 1810, y = 0.5, yend = 0.5), linetype = "dashed") +
geom_segment(aes(x = 1810, xend = 1810, y = 0, yend = 0.5), linetype = "dashed")
myplot