Сюжетные линии выживания лейбла R studio с использованием ggplot

Я пытаюсь пометить строки на выходе автоплота, созданного из объекта Surfit. Я экспериментировал с directlabels пакет безуспешно (проблема, похоже, в том, что функции geom_* не имеют доступа к базовым данным и не могут найти переменные из набора данных при использовании вместе с объектом сурфит, а не только сами данные внутри ggplot.

Подпрограмма автоплота, которую я сейчас использую:

autoplot(survfit(Surv(time, status) ~ sex, data = lung), fun = 'event')

Это создает такой сюжет:

Что я хотел бы сделать, так это переместить легенду «слои» с правой стороны на линии (прямо над ними слева или справа, эти детали для меня не важны).

Я не хочу маркировать каждую отдельную точку, просто помечаю каждую строку локально.

1 ответ

Использование библиотек ggplot а также ggrepel, вот что вы можете сделать:

Добавление меток к каждой строке

      autoplot(survfit(Surv(time, status) ~ sex, data = lung), fun = 'event', legendLabs = FALSE) +
  geom_label_repel(data = . %>% group_by(strata) %>% summarise(x = mean(time), y = mean(surv)), 
                  aes(x = x, y = y, label = strata, color = strata)) +
  theme(legend.position = 'none')

Поскольку с автоплотом можно работать так же, как с объектом ggplot, вы можете добавить текстовую метку, где ggrepel пригодится. ggrepel пытается оптимизировать положение добавленного текста / меток.

Поскольку вы не хотите добавлять метку к каждой отдельной точке данных, я изменил используемые данные, используя dplyr summarise, так что осталось две строки, по одной для каждой «страты», и два дополнительных столбца (x и y), чтобы указать положение метки на основе соответствующих средних значений.

Кроме того, поскольку я считаю, что в этом больше нет необходимости, я удалил легенду.

Текст специальной метки

Если вы хотите настроить текст метки, например, потому что теперь заголовок легенды исчез, и вы хотите добавить эту информацию, вы можете сделать это, добавив еще один столбец к используемым данным. geom_label_repel. Вот пример:

      autoplot(survfit(Surv(time, status) ~ sex, data = lung), fun = 'event', legendLabs = FALSE) +
  geom_label_repel(data = . %>% group_by(strata) %>% summarise(x = mean(time), y = mean(surv)) %>% mutate(label = paste('strata =', strata)), 
                  aes(x = x, y = y, label = label, color = strata)) +
  theme(legend.position = 'none')

Другие вопросы по тегам