一 數(shù)據(jù)和R包二 原生KM曲線三 優(yōu)化KM曲線1 survminer繪制KM曲線2 坐標(biāo)軸,標(biāo)題,主題優(yōu)化3 Risk Table4 添加注釋信息 本文首發(fā)于“生信補(bǔ)給站”:https://mp.weixin.qq.com/s/lpkWwrLNtkLH8QA75X5STw
生存分析作為分析疾病/癌癥預(yù)后的出鏡頻率超高的分析手段,而其結(jié)果展示的KM曲線也必須擁有姓名和顏值! 生存分析相關(guān)推文: 生存分析和KM曲線:R|生存分析(1) 分析結(jié)果一鍵輸出:R|生存分析-結(jié)果整理 時(shí)間依賴生存分析:R|timeROC-分析 一 數(shù)據(jù)和R包為方便,使用內(nèi)置lung數(shù)據(jù)集 #載入所需的R包 library("survival") library("survminer") #載入并查看數(shù)據(jù)集 data("lung") head(lung) inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss 1 3 306 2 74 1 1 90 100 1175 NA 2 3 455 2 68 1 0 90 90 1225 15 3 3 1010 1 56 1 0 90 90 NA 15 4 5 210 2 57 1 1 90 60 1150 11 5 1 883 2 60 1 0 100 90 NA 0 6 12 1022 1 74 1 1 50 80 513 0 二 原生KM曲線#構(gòu)建模型 fit <- survfit(Surv(time, status) ~ sex, data=lung)
#繪制原生KM曲線 plot(fit) 
可以很容易的發(fā)現(xiàn)與文獻(xiàn)中的差異,可優(yōu)化: 1)區(qū)分兩條線的顏色和legend 2)坐標(biāo)軸,標(biāo)題,主題優(yōu)化 3)Risk table 4)P值,OR值,CI值等注釋信息 三 優(yōu)化KM曲線1 survminer繪制KM曲線p1 <- ggsurvplot(fit) P1 
吶,線的顏色可以和性別對(duì)應(yīng)起來(lái)了,Q1解決! 2 坐標(biāo)軸,標(biāo)題,主題優(yōu)化p2 <- ggsurvplot(fit, data = lung, surv.median.line = "hv", #添加中位生存曲線 palette=c("red", "blue"), #更改線的顏色 legend.labs=c("Sex1","Sex2"), #標(biāo)簽 legend.title="Treatment", title="Overall survival", #標(biāo)題 ylab="Cumulative survival (percentage)",xlab = " Time (Days)", #更改橫縱坐標(biāo) censor.shape = 124,censor.size = 2,conf.int = FALSE, #刪失點(diǎn)的形狀和大小 break.x.by = 100#橫坐標(biāo)間隔 ) P2 
以上基本就完成了KM曲線顏色,線型大小,標(biāo)簽,橫縱坐標(biāo),標(biāo)題,刪失點(diǎn)等的修改,Q2搞定! 注意中位生存時(shí)間表示50 %的個(gè)體尚存活的時(shí)間,而不是生存時(shí)間的中位數(shù) 3 Risk Tablep3 <- ggsurvplot(fit, data = lung, surv.median.line = "hv", #添加中位生存曲線 palette=c("red", "blue"), legend.labs=c("Sex1","Sex2"), #標(biāo)簽 legend.title="Treatment", title="Overall survival", ylab="Cumulative survival (percentage)",xlab = " Time (Days)", #更改橫縱坐標(biāo) censor.shape = 124,censor.size = 2,conf.int = FALSE, break.x.by = 100, risk.table = TRUE,tables.height = 0.2, tables.theme = theme_cleantable(), ggtheme = theme_bw()) p3 
注 tables.height可調(diào)整為看起來(lái)“舒服”的高度 根據(jù)risk table 可以看出關(guān)鍵點(diǎn)的當(dāng)前狀態(tài),Q3擺平! 4 添加注釋信息1)添加KM的P值 P4 <- ggsurvplot(fit, data = lung, pval = TRUE,#添加P值 pval.coord = c(0, 0.03), #調(diào)節(jié)Pval的位置 surv.median.line = "hv", #添加中位生存曲線 palette=c("red", "blue"), legend.labs=c("Sex1","Sex2"), #標(biāo)簽 legend.title="Treatment", title="Overall survival", ylab="Cumulative survival (percentage)",xlab = " Time (Days)", #更改橫縱坐標(biāo) censor.shape = 124,censor.size = 2,conf.int = FALSE, break.x.by = 100, risk.table = TRUE,tables.height = 0.2, tables.theme = theme_cleantable(), ggtheme = theme_bw()) P4 
pval.coord可以調(diào)節(jié)P值得位置 2)添加COX回歸hazard ratio值等相關(guān)信息** ###添加COX回歸hazard ratio值相關(guān)信息 res_cox<-coxph(Surv(time, status) ~sex, data=lung) p3$plot = p3$plot + ggplot2::annotate("text",x = 50, y = 0.15, label = paste("HR :",round(summary(res_cox)$conf.int[1],2))) + ggplot2::annotate("text",x = 50, y = 0.10, label = paste("(","95%CI:",round(summary(res_cox)$conf.int[3],2),"-",round(summary(res_cox)$conf.int[4],2),")",sep = ""))+ ggplot2::annotate("text",x = 50, y = 0.05, label = paste("P:",round(summary(res_cox)$coef[5],4))) p3 
3)添加其他信息 可類似上述annotation得方式,使用ggplot2添加文字,箭頭,公式等其他信息,下面為你可能需要的ggplot2的幾個(gè)知識(shí): ggplot2|詳解八大基本繪圖要素 ggplot2|theme主題設(shè)置,詳解繪圖優(yōu)化-“精雕細(xì)琢” ggplot2 |legend參數(shù)設(shè)置,圖形精雕細(xì)琢 ggplot2|ggpubr進(jìn)行“paper”組圖合并 參考資料: 更多參數(shù)參見(jiàn)官方文檔:https://github.com/kassambara/survminer ◆ ◆ ◆ ◆ ◆ 精心整理(含圖版)|R語(yǔ)言生信分析,可視化,你要的全拿走,建議收藏!
|