Ошибка при добавлении всплывающей подсказки в 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)
Другие вопросы по тегам