2016-11-03 6 views
0

ggplotのggsurv関数にいくつか問題があります。ggsurvの伝説と線の太さ

凡例と線のスタイルで外観の順序を制御したいと思います。

私は他の人が同様の問題を抱えていることがわかりますが、私は私の問題は、私は伝説では標準値が置き換え期待しているでしょう。ここ

library(GGally) 
library(survival) 
data(lung) 
surv1 <- survfit(Surv(time,status) ~ sex, data = lung) 
p1 <- ggsurv(surv1, lty.est=c(1,2), surv.col=c("black", "red")) 
p1 <- p1 + scale_colour_discrete(name = 'sex', breaks = c(1,2), labels=c('XX','XY')) 
p1 

ようである標準肺のデータを用いて溶液

を理解しませんXXとXYで。しかし、私は代わりに伝説の複製を得る。 1つは正しい行属性で、名前と色は間違っています。もう1つは、正しい名前と色で、間違った行属性です。

私は

p1 <- p1 + guides(colour = FALSE) 

を挿入しようとしたが、それは伝説

私は何を理解していないの間違った部分を削除しますか?イカのコメントに

おかげで解決策は以下のとおりです。

library(GGally) 
library(survival) 
data(lung) 
surv1 <- survfit(Surv(time,status) ~ sex, data = lung) 
p1 <- ggsurv(surv1, lty.est=c(1,2), surv.col=c("black", "red")) 
p1 <- p1 + scale_colour_discrete(name = 'sex', breaks = c(1,2), labels=c('XX','XY')) 
p1 <- p1 + guides(linetype = F, colour = guide_legend(override.aes = list(linetype = c(2,1)))) 
p1 

私はoverride.aesを手動で凡例で使用する線の種類を設定することを理解することができます。私は、線種= Fが実際に何をしているのかは十分には分かっていませんが、機能します!

2番目の質問です。手動で線の太さをどのように設定します(両方のグラフと凡例で)

p1 <- p1 + geom_line(size=2) 

を追加すると、動作しません。それは、偽の黒い線を描画し、偽の黒い線は、偽の線と完全に整列していない。

+0

これは私の最初の問題を解決しました。上記に追加しました。行の太さを変更する方法が新たな問題を引き起こす –

+0

行は 'geom_line'ではなく' geom_step'を使って描画されます。ですから、 'geom_step(size = 2)'は色をコントロールできないかもしれないが、あなたが望むことをするでしょう。 [この回答](http://stackoverflow.com/questions/39907004/how-to-put-different-symbols-in-autoplot/39908638#39908638)は、このグラフを作成していた場合のggplot2コードの様子を示しています。モデル上で 'ggfortify :: fortify'を使用した後に手を差し伸べてください。 – aosmith

+0

aosmith geom_stepが正しいです。今私は正しい行を持っています。しかし、それらは黒であり、黒と赤のsurv.colで指定されていません。私は前にそれに気付かなかったが、上記の解決策は実際には赤と緑で、赤と黒ではなかった。奇妙にも(少なくとも私のために)geom_step行を挿入すると、線は濃い黒 –

答えて

1

が、それはここで同じような状況では、他人のために

は私の手では、私が望んで変更される可能性がどこに私のコードです(私が知らなかった)ggfortifyと協力し

if(!require(survival)){ 
    install.packages("survival") 
} 
library(survival) 

if(!require(GGally)){ 
    install.packages("GGally") 
} 
library(GGally) 

if(!require(ggplot2)){ 
    install.packages("ggplot2") 
} 
library(ggplot2) 

if(!require(ggfortify)){ 
    install.packages("ggfortify") 
} 
library(ggfortify) 


    fit <- survfit(Surv(age_at_ecg, age_at_censor, dod) ~ rs9388451, data = exom) 
    plot.data = fortify(fit) 
    p1 <- ggplot(plot.data, aes(time, surv, color = strata)) 
    p1 <- p1 + geom_point(size=0) 
    p1 <- p1 + geom_step(size=2) 
    p1 <- p1 + scale_color_manual(name = "rs9388451", labels = c('WT', 'Heterozygote', 'Homozygote'), values = c('black', 'blue', 'red')) 
    p1 <- p1 + scale_x_continuous(limits=c(30,80),breaks=seq(30,80,10)) # x ticks from 0 to 180 by 30 
    p1 <- p1 + scale_y_continuous(limits=c(0.80,1),breaks=seq(0.80,1,0.05)) 
    p1 <- p1 + xlab("Age (years)") 
    p1 <- p1 + ylab('Survival') 
    p1 <- p1 + theme(panel.background = element_rect(fill="white")) # white plot background 
    p1 <- p1 + theme(legend.key = element_rect(fill="white")) 
    p1 <- p1 + theme(axis.title.y=element_text(margin=margin(0,15,0,0))) # Add space to axis title 
    p1 <- p1 + 
     theme(axis.text=element_text(size=25,face="bold",colour="black"), axis.title=element_text(size=25,face="bold")) 
    p1 <- p1 + theme(legend.text = element_text(colour="black", size=15, face="bold")) 
    p1 <- p1 + theme(legend.title = element_text(colour="black", size=15, face="bold")) 
    p1 
3

scale_colorscale_linetypeの両方を使用して凡例を結合し、2つの尺度が同じ名前とラベルを持つようにすることができます。色をscale_color_manualに再度定義する必要があるように見えます。

geom_step経由で行を追加し、のオブジェクトを使用して、正しい色と行の種類を設定することができます。これの欠点は、2番目の行セットが元のものの上に描画されるため、結果が必ずしもうまく見えるとは限りません。

ggsurv(surv1, lty.est=c(1,2), surv.col=c("black", "red")) + 
    scale_color_manual(name = "sex", values = c("black", "red"), labels = c("XX", "YY")) + 
    scale_linetype_discrete(name = "sex", labels = c("XX", "YY")) + 
    geom_step(size = 1, aes(color = group, linetype = group)) 

ggplot2を使用してグラフを「手作業で」作成するだけの価値があることを指摘しておきます。これはモデルオブジェクト上のfortifyggfortifyから生存モデルに対して行うことができます。aosmithのアドバイスに最後に起因する

library(ggfortify)  
library(ggplot2)   
plot.data = fortify(surv1, surv.connect = TRUE) 

ggplot(plot.data, aes(time, surv, color = strata)) + 
    geom_step(aes(linetype = strata), size = 1) + 
    geom_point(data = subset(plot.data, n.censor > 0), shape = 3, color = "red") + 
    scale_color_manual(name = "sex", labels = c("XX", "YY"), values = c("black", "red")) + 
    scale_linetype_discrete(name = "sex", labels = c("XX", "YY")) + 
    labs(y = "Survival", x = "Time")