2016-05-26 6 views
1

Я использую Rstudio. Я использую функцию ggsurv от GGally пакет для рисования кривых Каплана-Мейера для моих данных (для анализа выживаемости), из учебника here. Я использую его вместо plot, потому что ggsurv сам по себе заботится о легендах.Дифференцирование каждой линии с другим типом на графиках `ggsurv` (или в` plot`)

Как показано на ссылке, несколько кривых различаются по цвету. Я хочу дифференцировать по типу linetype. У учебника, по-видимому, нет возможности для этого. Ниже моя команда:

surv1 <- survfit(Surv(DaysOfTreatment,Survived)~AgeOnFirstContactGroup) 
print(ggsurv(surv1, lty.est = 3)+ ylim(0, 1)) 

lty.est=3 (или 2) дает те же пунктирные линии для всех линий. Я хочу по-разному пунктирную линию для каждой строки. Использование lty=type дает ошибку: object 'type' not found. И lty=type будет работать в ggplot, но ggplot не имеет прямого отношения к survfit участкам.

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

+0

@lmo Я не могу найти пример или учебник для построения объекта 'survfit'. Есть примеры для обычного графика xy: [здесь] (http://stackoverflow.com/questions/16320148/ggplot2-draw-dashed-lines-of-same-colour-as-solid-lines-belonging-to-different- g) и [здесь] (http://sape.inf.usi.ch/quick-reference/ggplot2/linetype). Но они используют 'aes', который я не могу понять, как использовать при построении' survfit'. Не могли бы вы написать пару строк и показать мне, как это можно сделать? Я пытаюсь много чего, но никто из них не работает. –

+1

@lmo Это та же ссылка, о которой я упоминал в вопросе! –

+0

Это также 3-летняя ссылка. 'ggsurv' не такой гибкий, как хотелось бы. Я бы рекомендовал создать собственную версию функции для использования 'linetype' вместо цвета [или выбора более поздней версии] (http: // r-addict.ком/2016/05/23/Информационно-Survival-Plots.html). – Gregor

ответ

9

Из документации для ggsurv

lty.est: linetype of the survival curve(s). Vector length should be either 1 or equal to the number of strata.

Итак, для получения другого типа линии для каждой страты, установите lty.est равным вектору той же длины, что и число строк, которые вы рисуете, с каждым значением, соответствующим другому типу линии.

Например, используя данные легочные из survival пакета

library(GGally) 
library(survival) 
data(lung) 
surv1 <- survfit(Surv(time,status) ~ sex, data = lung) 
ggsurv(surv1, lty.est=c(1,2), surv.col = 1) 

дает следующий сюжет

enter image description here

Вы можете добавить ggplot темы или другие элементы ggplot к сюжету тоже , Например, мы можем улучшить внешний вид, используя cowplot темы следующего

library(ggplot2) 
library(cowplot) 
ggsurv(surv1, lty.est=c(1,2), surv.col = 1) + theme_cowplot() 

enter image description here

Если вам нужно изменить легенду этикетку после дифференцирования по отсчитываемому, то вы можете сделать это таким образом

ggsurv(surv1, lty.est=c(1,2), surv.col = 1) + 
    guides(colour = FALSE) + 
    scale_linetype_discrete(name = 'Sex', breaks = c(1,2), labels = c('Male', 'Female')) 

enter image description here

+0

Изменение меток надписи, как вы показали, дает результат: 'Scale for 'linetype' уже присутствует. Добавление другой шкалы для «типа линии», которая заменит существующий масштаб. «И легенды не изменены. Как это исправить? –

+0

Он отлично работает для меня на R 3.2.2, с GGally v 1.01 и ggplot2 v 2.1.0. Вы уверены, что ваши пакеты и R являются актуальными? Вы обязательно увидите предупреждение о том, что новый масштаб заменяет старый, но вы можете смело игнорировать это, поскольку это то, что вы хотите. Можете ли вы опубликовать минимальный воспроизводимый пример, необходимый для воспроизведения вашей проблемы (т. Е. Как данные кода *, так и *, которые вы используете). [Здесь] (http://stackoverflow.com/help/mcve) и [здесь] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) на как публиковать информацию, которую люди должны вам помочь. – dww

+0

Кстати, если вы использовали 'guide (linetype = FALSE)', а не то, что я разместил в своем ответе ('guide (color = FALSE)'), это создаст описанное вами поведение. – dww