Цвет по другой переменной, чем используется для кривых в ggsurvplot() из пакета survminer

При построении графика с помощью ggsurvplot() хотелось бы раскрасить кривые выживания категориальной переменной, которая представляет собой надмножество категориальных переменных, используемых для определения кривых (слоев). Я прочитал всю документацию и безуспешно искал ответ. Воспроизводимый код представлен ниже, хотя фактический вызов функции ggsurvplot() является псевдокодом.

library(survival)
library(survminer)
veteran <- veteran
veteran$group <- with(veteran,
                      ifelse(
                         celltype == "squamous" | celltype == "smallcell",
                         "group1", "group2"
                            )
                      )
# code used to generate the accompanying plot
surv <- survfit(Surv(time, status) ~ celltype, data = veteran)
ggsurvplot(fit = surv, data = veteran)

Кривые выживания для примера данных для предоставления контекста

Я хотел бы, чтобы форма и значение кривых оставались такими же, как на приведенном выше графике выживаемости, но цвет для «плоскоклеточных» и «мелкоклеточных» был одинаковым (и представлял «группу 1»), а две другие кривые имели цвет "группа 2". Легенда должна содержать две записи: «группа1» и «группа2».

Ниже приведен пример кода, который может лучше объяснить, что я пытаюсь сделать (ни то, ни другое не работает)

# pseudo-code, version1: without the grouping data in the survfit object
surv <- survfit(Surv(time, status) ~ celltype, data = veteran)
ggsurvplot(fit = surv, color = veteran$group,
           legend.labs = levels(factor(veteran$group)), data = veteran)

# pseudo-code, version2: with the grouping data in the survfit
surv <- survfit(Surv(time, status) ~ celltype + group, data = veteran)
ggsurvplot(fit = surv, color = group,
           legend.labs = levels(factor(veteran$group)), data = veteran)

РЕДАКТИРОВАТЬ: было предложено использовать функцию palette, но следующий код выдает ошибку

ggsurvplot(fit = surv,  palette = c("red", "red", "blue", "blue"), data = veteran)
#Error in names(scurve_cols) <- legend.labs : 
#'names' attribute [4] must be the same length as the vector [2]

Однако указание четырех различных цветов работает.

ggsurvplot(fit = surv,  palette = c("red", "red1", "blue", "blue1"), data = veteran)

person user6571411    schedule 15.06.2017    source источник


Ответы (1)


Отвечая на это для полноты. Решение предоставлено пользователем Henrik в комментариях. Возможно, работает только с новейшей версией survminer [0.4.0].

library(survival)
library(survminer)
veteran <- veteran
#coding an external 'superset' variable is unnecessary
surv <- survfit(Surv(time, status) ~ celltype, data = veteran)
ggsurvplot(fit = surv, palette = c("red", "red", "blue", "blue"), data = veteran)

цвета преобразованы правильно

person user6571411    schedule 15.06.2017