2016-05-26 17 views
1

Ich verwende Rstudio. Ich verwende ggsurv Funktion von GGally Paket zum Zeichnen von Kaplan-Meier-Kurven für meine Daten (für Überlebensanalyse), aus Tutorial here. Ich benutze es anstelle von plot weil ggsurv kümmert sich um Legenden von selbst.Unterscheiden Sie jede Zeile mit verschiedenen Typen in `ggsurv` Plots (oder in` Plot`)

Wie auf dem Link gezeigt, werden mehrere Kurven farblich unterschieden. Ich möchte anhand des Linientyps unterscheiden. Das Tutorial scheint keine Option dafür zu haben. mein Befehl folgend:

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

lty.est=3 (oder 2) ergibt gleiche gestrichelte Linien für alle Linien. Ich möchte für jede Zeile eine andere gestrichelte Linie haben. Mit lty=type gibt Fehler: object 'type' not found. Und lty=type würde in ggplot arbeiten, aber ggplot nicht direkt mit survfit Plots befassen.

Bitte zeigen Sie mir, wie Kurven in entweder ggsurv oder einfach plot von Linientyp unterscheiden (obwohl ich ggsurv bevorzugen würde, weil sie kümmert sich der Legenden nimmt)

+0

@lmo Ich kann kein Beispiel oder Tutorial zum Zeichnen von 'survfit' Objekt finden. Es gibt Beispiele für normale xy-Plots: [hier] (http://stackoverflow.com/questions/16320148/ggplot2-draw-dashed-lines-of-same-colour-as-solid-lines-belonging-to- different-- g) und [hier] (http://sape.inf.usi.ch/quick-reference/ggplot2/linetype). Aber sie benutzen 'aes', die ich nicht herausfinden kann, wie man' survit' verwendet. Kannst du bitte ein paar Zeilen schreiben und mir zeigen, wie das geht? Ich probiere viele Dinge aus, aber keiner von ihnen funktioniert. –

+1

@lmo Dies ist der gleiche Link, den ich in der Frage erwähnt habe! –

+0

Es ist auch ein 3-jähriger Link. 'ggsurv' ist nicht so flexibel, wie man möchte. Ich würde empfehlen, eine eigene Version der Funktion zu erstellen, um 'Linientyp' anstelle von Farbe zu verwenden [oder eine neuere Option auszuwählen] (http: // r-addict.com/2016/05/23/Informative-Survival-Plots.html). – Gregor

Antwort

9

Aus der Dokumentation für ggsurv

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

So, Um für jede Schicht einen anderen Linientyp zu erhalten, setzen Sie lty.est gleich einem Vektor gleicher Länge wie die Anzahl der Linien, die Sie zeichnen, wobei jeder Wert einem anderen Linientyp entspricht.

Zum Beispiel unter Verwendung der Lungen Daten aus dem survival Paket

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

gibt die folgende Handlung

enter image description here

Sie können auch ggplot Themen oder andere ggplot Elemente der Handlung hinzufügen . Zum Beispiel können wir das Aussehen mit dem cowplot Thema verbessern

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

enter image description here

Wenn Sie die Legende folgt Etiketten nach Differenzierung durch Linientyp ändern müssen, dann können Sie es auf diese Weise

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')) 
tun

enter image description here

+0

Das Ändern der Beschriftungen hinterher, wie Sie es gezeigt haben, ergibt die Ausgabe: 'Scale for 'linetype' ist schon da. Hinzufügen einer anderen Skala für 'Linientyp', die die vorhandene Skala ersetzen wird.' Und die Legenden werden nicht geändert. Wie behebe ich das? –

+0

Es funktioniert perfekt für mich auf R 3.2.2, mit GGally v 1.01 und ggplot2 v 2.1.0. Haben Sie sichergestellt, dass Ihre Pakete und R auf dem neuesten Stand sind? Sie werden sicherlich die Warnung sehen, dass die neue Skala die alte ersetzt, aber Sie können das ignorieren, da dies das ist, was Sie wollen. Können Sie ein minimales reproduzierbares Beispiel veröffentlichen, das zur Reproduktion Ihres Problems erforderlich ist (d. H. Die von Ihnen verwendeten * und * Daten)? [Hier] (http://stackoverflow.com/help/mcve) und [hier] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) on wie man die Informationen posten kann, die Leute benötigen, um Ihnen zu helfen. – dww

+0

Übrigens, wenn Sie 'guides (linetype = FALSE)' anstelle dessen, was ich in meiner Antwort geschrieben habe ('guides (color = FALSE)'), erzeugen Sie das von Ihnen beschriebene Verhalten. – dww