Ошибка при добавлении всплывающей подсказки в ggsurvplot с помощью ggsurvplot
Я пытаюсь добавить всплывающую подсказку к ggsurvplot
, я использую ggiraph
для отображения сюжета. Я добавил минимальный пример того, что я пытаюсь сделать ниже. Если я не добавлю xlim в ggsurvplot
мой код, кажется, работает. Ниже приведен код, который работает:
library(survminer)
library(survival)
library(ggiraph)
fit<- survfit(Surv(time, status) ~ sex, data = lung )
g <- ggsurvplot(fit, data = lung)
tooltip <- paste0("Time:", g$plot$data$time, "<br/>", "Survival Prob:", g$plot$data$surv)
x <- g$plot+geom_point_interactive(aes(tooltip = tooltip))
ggiraph(print(x), zoom_max = 5)
Теперь я хочу ограничить значения оси X, чтобы добавить параметр xlim = c(0, 800)
для ggsurvplot, как показано ниже:
library(survminer)
library(survival)
library(ggiraph)
fit<- survfit(Surv(time, status) ~ sex, data = lung )
g <- ggsurvplot(fit, data = lung, xlim = c(0,800))
tooltip <- paste0("Time:", g$plot$data$time, "<br/>", "Survival Prob:", g$plot$data$surv)
x <- g$plot+geom_point_interactive(aes(tooltip = tooltip))
ggiraph(print(x), zoom_max = 5)
Это дает мне следующую ошибку:
Error: length(ids) == length(str) is not TRUE
Как я могу исправить эту ошибку?
1 ответ
Решение
Это проблема с ggiraph. Добавление xlim
вызывает отсечение, некоторые точки не будут отрисованы, но переменная всплывающей подсказки не обрезается; Я постараюсь решить это.
Обходной путь - отфильтровать данные перед отправкой в geom_point_interactive:
library(survminer)
library(survival)
library(ggiraph)
fit<- survfit(Surv(time, status) ~ sex, data = lung )
g <- ggsurvplot(fit, data = lung, xlim = c(0,800))
data_ <- g$plot$data
data_ <- base::transform(data_, tooltip = sprintf("Time: %.0f<br/>Survival Prob: %.3f", time, surv) )
data_ <- data_[data_$time < 800, ]
x <- g$plot + geom_point_interactive(data = data_, aes(time, surv, tooltip = tooltip))
ggiraph(print(x), zoom_max = 5)