ggplot2/ggsurvplot:`element_text()` 的向量化输入未得到官方支持
ggplot2/ggsurvplot: Vectorized input to `element_text()` is not officially supported
我正在尝试使用 survminer
和 survival
包绘制相应分析的生存曲线。在 ggsurvplot
命令中设置 risk.table = TRUE
会导致警告说 'Vectorized input to element_text()
is not officially supported. Results may be unexpected or may change in future versions of 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 轴格式。在 github 关于 ggplot2 的未来是否应该支持向量化输入 element_text() 的讨论中,开发人员似乎宁愿选择弃用周期 https://github.com/tidyverse/ggplot2/issues/3492.
我想知道目前是否有某种方法可以解决这个问题,因为我想在未来经常使用 ggsurvplot
及其风险表功能。使用 ggplot2
创建的其他绘图似乎也会出现此问题(请参阅上面的 github 讨论)。但是,在 reprex 中,它似乎与 ggsurvplot
的固有参数有关,这对我来说似乎对于将来使用此功能至关重要。任何支持意见将不胜感激。
这里有一个变通方法,可以从 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))
我正在尝试使用 survminer
和 survival
包绘制相应分析的生存曲线。在 ggsurvplot
命令中设置 risk.table = TRUE
会导致警告说 'Vectorized input to element_text()
is not officially supported. Results may be unexpected or may change in future versions of 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 轴格式。在 github 关于 ggplot2 的未来是否应该支持向量化输入 element_text() 的讨论中,开发人员似乎宁愿选择弃用周期 https://github.com/tidyverse/ggplot2/issues/3492.
我想知道目前是否有某种方法可以解决这个问题,因为我想在未来经常使用 ggsurvplot
及其风险表功能。使用 ggplot2
创建的其他绘图似乎也会出现此问题(请参阅上面的 github 讨论)。但是,在 reprex 中,它似乎与 ggsurvplot
的固有参数有关,这对我来说似乎对于将来使用此功能至关重要。任何支持意见将不胜感激。
这里有一个变通方法,可以从 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))