ggplot2/ggsurvplot:`element_text()` 的向量输入不受官方支持

3
我正在尝试使用survminersurvival包绘制相应分析的生存曲线。在ggsurvplot命令中设置risk.table = TRUE会出现警告,提示“向element_text()的矢量化输入没有正式支持。结果可能是意外的或在未来版本的ggplot2中可能会更改。”
我还尝试了其他数据,发现这个问题确实存在。下面是我在R版本4.0.3、Rstudio版本1.2.5033上运行的一个简单示例:
library('survival')
library('survminer')
library('ggplot2')

lung <- survival::lung
fit<- survfit(Surv(time, status) ~ sex, data = lung)
ggsurvplot(fit, data = lung, risk.table = TRUE)

如果risk.table = FALSE,警告就不会出现,所以我认为risktables参数在某种程度上干扰了ggplot2的x轴格式。在关于是否应该支持未来ggplot2中element_text()的矢量输入的讨论中,开发人员似乎更倾向于使用逐步弃用周期的方法。https://github.com/tidyverse/ggplot2/issues/3492
我想知道当前是否有一些解决此问题的方法,因为我将来想要经常使用ggsurvplot和其risktables功能。这个问题似乎也会出现在使用ggplot2创建的其他图形中(请参见上述github讨论)。然而,在reprex中,它似乎与ggsurvplot的固有参数有关,对于我来说,这个参数似乎是使用此函数的关键。任何支持性的意见都将不胜感激。

这是一个很好的问题,但最好在RStudio社区论坛上提问,在那里你更有可能直接得到ggplot2开发人员的关注。 - qdread
谢谢你的提示!在Rstudio社区页面上,@hadley说:“最容易说出community.rstudio.com不是什么:它不是Stack Overflow、GitHub或我们的高级支持服务的替代品:如果您有一个明确定义和清晰的问题(和相应的reprex),您仍然应该在Stack Overflow上提问。”暂时让我们看看是否能在Stack Overflow上学到关于这个问题的东西,如果不行,我很乐意听从你的建议。 - GRowInG
两个早期的评论都是合理的。但与其发布到RStudio支持,不如联系survminer的作者,这样是否同样值得呢?毕竟,问题出在他们的风险表上... - Limey
我使用combine=T而不是risk.table=T时遇到了相同的问题。 - Vincent
你尝试过使用ggsurvplot_combine()作为替代方案吗? - GRowInG
1个回答

1
这里有一个解决方法,可以从risk.table功能中获取信息,并将其(以及更多信息)呈现在生存图旁边。我猜在问题被作者解决之前,这可能是我们现在能做的最好的事情。
library('survival')
library('survminer')
library('ggplot2')
library('kableExtra')


# Specify dataset
lung <- survival::lung
fit<- survfit(Surv(time, status) ~ sex, data = lung)


# -----------Scenario 1: KM-plot and risk.table without writing a function

kmplot <- ggsurvplot(fit, data = lung, risk.table = FALSE)
risktable <- kmplot$data.survtable


# Using R Markdown: Setting results='asis' in the corresponding chunk header - knit to html
## Output KM-plot
kmplot

## Output risktable
print (
  kable(risktable, caption = paste("Survival stratified by sex")) %>%
    column_spec(1, bold = T) %>%
    kable_styling(bootstrap_options = "hover", full_width = TRUE))



# -----------Scenario 2: Using a function
fun_surv <- function (x) {
kmplot <- ggsurvplot(x, data = lung, risk.table = FALSE)
risktable <- kmplot$data.survtable
list_surv <- list(kmplot, risktable)
list_surv
}

res_surv <- fun_surv(fit)


# Using R Markdown: Setting results='asis' in the corresponding chunk header - knit to html
## Output KM-plot
res_surv[[1]]

## Output risktable
print (
  kable(res_surv [[2]], caption = paste("Survival stratified by sex")) %>%
    column_spec(1, bold = T) %>%
    kable_styling(bootstrap_options = "hover", full_width = TRUE))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接