ggsurvplot 在 xlim 处截断图片

问题描述 投票:0回答:1

我使用 ggsurvplot 和以下代码创建了以下生存曲线:

library(survminer)
library(survival)

set.seed(2025)
fakedata <- data.frame(time = rexp(20, rate = log(2)/6), event = sample(x = c(0, 1), size = 20, replace = T, prob = c(0.25, 0.75)))
fakesurv <- survfit(Surv(time, event) ~ 1, data = fakedata)

ggsurvplot(fakesurv, ylab = "Progression-free survival (%)", 
           xlab = "Time since first treatment (months)", 
           xlim = c(0,18), break.x.by = 3, conf.int = F,  
           risk.table = "nrisk_cumcensor",  surv.scale = "percent", 
           tables.y.text = F, legend.title = element_blank(), 
           legend.labs = "All patients", axes.offset = F)

如您所见,图片有两处错误:曲线的 x 轴与风险表之间的时间点(3、6 等)不匹配,并且整个图片在 18 处被截断几个月,因此该时间点面临风险的数字无法读取。

我只想问第二个问题:原图,这是用假数据重新制作的,只有第二个问题,没有第一个问题。然而现在我也想知道(当然)第一个问题来自哪里。

关于第二个问题:如果将

axes.offset
命令更改为
T
,它就会消失。然而此时轴不再在 (0, 0) 处相交。 (我们希望他们这样做,这就是为什么我们在代码中使用 `axes.offset = F。)

survplot fake data

r ggplot2
1个回答
0
投票

这种问题通常可以通过增加主题元素

plot.margin
在 ggplot 中解决。然而,
ggsurvplot
的工作方式略有不同,因为
ggsurvplot
对象实际上是列表中的两个 ggplot,并具有自己的绘图方法将它们缝合在一起。因此,您不能仅通过在绘图代码末尾添加
theme()
调用来修改主题元素。

调用

ggsurvplot
时可用的主题选项实际上有点有限。我可能只是创建并存储对象,然后进入并更改我想要修改的位:

p <- ggsurvplot(fakesurv, ylab = "Progression-free survival (%)", 
           xlab = "Time since first treatment (months)", 
           xlim = c(0,18), break.x.by = 3, conf.int = F,  
           risk.table = "nrisk_cumcensor",  surv.scale = "percent", 
           tables.y.text = F, legend.title = element_blank(), 
           legend.labs = "All patients", axes.offset = F) 

p$plot$theme$plot.margin <- ggplot2::margin(10, 50, 10, 10)
p$table$theme$plot.margin <- ggplot2::margin(10, 50, 10, 10)
p$table$coordinates$clip <- "off"

p

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.