将 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 中的笛卡尔坐标的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用survminer包生存分析及可视化(ggsurvplot)实战详解:从数据集导入生存对象生成ggsurvplot可视化参数配置设置可视化对比