将 xlim 更改为 ggsurvplot 中的笛卡尔坐标

Posted

技术标签:

【中文标题】将 xlim 更改为 ggsurvplot 中的笛卡尔坐标【英文标题】:Change xlim to cartesion coordinates in ggsurvplot 【发布时间】:2021-12-11 21:40:07 【问题描述】:

我想创建一条具有 95%-CI 的 KM 曲线,其中 x 轴放大以显示 0-60 个月之间的值。在我使用 xlim 之前,这一切都适用于 ggsurvplot。

ggsurvplot(fitLC, data = KMSCC,
       risk.table = TRUE,
       conf.int=TRUE, 
       pval = TRUE, 
       break.x.by = 12, 
       xlab ="Time in Months",
       ylab="Relative Survival",
       ggtheme = theme_minimal(),
       risk.table.y.text.col = T,
       risk.table.y.text = FALSE)

ggsurvplot(fitLC, data = KMSCC,
           risk.table = TRUE,
           conf.int=TRUE, 
           pval = TRUE, 
           break.x.by = 12, 
           xlab ="Time in Months", 
           xlim = c(0, 60),
           ylab="Relative Survival",
           ggtheme = theme_minimal(),
           risk.table.y.text.col = T,
           risk.table.y.text = FALSE)

最后,有没有办法在不将较高的 x 轴值更改为 NA 的情况下放大首选 x 轴值?另见:https://github.com/kassambara/survminer/issues/4 如何将 xlim 模式更改为笛卡尔坐标?

我不能给出图中看到的数据,但为了重现性,这里是example dataset in a Google sheet。

【问题讨论】:

以下是否有帮助:删除xlim 参数并添加+ coord_cartesian(xlim=c(0, 60)) 不幸的是,这给了这个error: Error in .apply_surv_func(df, fun = fun) : Invalid 'fun' argument 您没有提供可重复的示例,这会使事情复杂化,但我们还是会尝试。如果您将 ggsurv 图保存在例如p1,然后您可以通过p1$plot 访问/操作绘图。也许以下工作:p2 <- p1$plot,然后是p2 + coord_cartesian(xlim=c(0,60)) 唉,p2 + coord_cartesian(xlim=c(0,60)) 也切断了较高的 x 轴值并删除了 95%CI。在控制台中添加以下评论:Coordinate system already present. Adding new coordinate system, which will replace the existing one. 这只是一个警告。看来这次情节“接受”了 coord_cartesion() 的变化。我将尝试使用“已知”数据集来解决问题。这可能需要一些时间...... 【参考方案1】:

当您使用ggsurvplot-参数xlim+ coord_cartesian(...) 放大surv_graph 的绘图时,表格会自动调整为仅显示绘图中的数据。这可能值得对软件包提出更改请求。同时,下面的代码可能是一种解决方法。

ggsurvplot() 创建一个包含 4 个列表的对象:其中一个包含图形,另一个包含表格。提取那些 2 并“排列”它们ggarrange() 可能会创建一个合适的图表。在 ggarrange 操作之前,我们使用coord_cartestion(xlim= ...)“放大”surv-plot:

### download file from link provided by OP 
### and save it in sink with the code below
lung <- read.csv(file = "../Tdebeus_001.csv", header = TRUE)

library("survival")
library("survminer")
library("ggpubr")       # for ggarrange
    
fitLC  <- survfit(Surv(Time_months, Event) ~ Cohort, data = lung)
    
p1 <- ggsurvplot(fitLC
                 , data = lung
                 , risk.table = TRUE
                 , conf.int=TRUE
                 , pval = TRUE
                 , break.x.by = 12
                 , xlab ="Time in Months"
                 # , xlim = c(0, 60)        ## commented out !
                 , ylab="Relative Survival"
                 , ggtheme = theme_minimal()
                 , risk.table.y.text.col = T
                 , risk.table.y.text = FALSE
                 )

### save parts of the original graph    
surv_plot <- p1$plot
surv_table <- p1$table

### zoom in on the surv_plot    
surv_plot2 <- surv_plot + coord_cartesian(xlim = c(0,60))

### put it back together
ggarrange(surv_plot2, surv_table, ncol = 1, heights = c(3, 1))

这会产生下图,可以使用 ggarrange() 的其他参数对其进行微调:(在上面的代码中,heights 将 3/4 的图形提供给 surv_plot)。

请让我知道这是否是您的想法。

【讨论】:

是的,这是完美的。感谢所有的努力 @Tdebeus 很高兴,我很高兴能提供帮助。

以上是关于将 xlim 更改为 ggsurvplot 中的笛卡尔坐标的主要内容,如果未能解决你的问题,请参考以下文章

SQL中的笛卡儿积问题和多表连接操作

R语言使用survminer包生存分析及可视化(ggsurvplot)实战详解:从数据集导入生存对象生成ggsurvplot可视化参数配置设置可视化对比

ggsurvplot 关于置信区间的奇怪行为

使用 survminer::ggsurvplot 在 r 中以编程方式绘制许多生存曲线的问题

如何将CAD中的视口更改为两个水平视口?

将列名更改为 MySQL 表中的第一行