生信喵 发表于 2024-4-16 19:15:46

画出优雅的生存曲线

![](https://files.mdnice.com/user/47194/8d13c60d-023e-44fb-8d96-26da2fcf53c3.gif)

# 背景

网上搜到过代码,但是都是用TCGA自己带的肺癌数据画的,往往我们手里的不是同样的格式的数据,本期推文带来的是自定义数据绘制。
![](https://files.mdnice.com/user/47194/2604d117-7783-44a6-be59-a9bd4f8e5bf0.gif)

# 使用场景

展示分类样本的生存曲线
场景一:患者的生存期跟基因变异的关系
场景二:药物处理导致模式动物生存期变化

# 载入自定义数据

```R
rm(list = ls())####魔幻操作,一键清空~
getwd()
setwd('D:/rtmp/survivalcurve/')

svData<-read.delim(file="20230829.txt",header=T,as.is=T)
head(svData)####查看 前六行
tail(svData)####查看 后六行
```

文件前六行:

```R
Months PD.L1.protein.high.expression PD.L1.protein.low.expression
1      1                            NA                            1
2      1                           1                           NA
3      1                            NA                            1
4      1                            NA                            1
5      4                            NA                            1
6      6                            NA                            1
```

文件后六行:

```R
   Months PD.L1.protein.high.expression PD.L1.protein.low.expression
82    128                            NA                            0
83    132                            NA                            0
84    132                            NA                            0
85    132                            NA                            0
86    139                           0                           NA
87    140                            NA                            0
```

# 输入数据的预处理

画图用的数据结构是一个包含样本分类、生存期和随访情况的数据框。
自定义数据的生存期是Months列,样本分类和随访情况融合在第2和3列中,
1代表death,0代表alive,NA和1/0代表样本分类,因此,样本分类和随访情况需要重新生成。

```R
svData$Expression<-NA
svData$Expression[!is.na(svData$PD.L1.protein.high.expression)]<-"high"
svData$Expression<-"low"
svData$Status<-1+(!is.na(svData$PD.L1.protein.high.expression|svData$PD.L1.protein.low.expression))
head(svData[,c(1,4,5)])#查看预处理后的结果
write.table(svData[,c(1,4,5)],file="norm.txt",sep = "\t",col.names = T,row.names = F,quote = F)
```

预处理后结果:

```R
Months Expression Status
1      1      low      2
2      1       high      2
3      1      low      2
4      1      low      2
5      4      low      2
6      6      low      2
```

可以看到重新生成后,svData中生存期、样本分类和追踪情况分别是Months、Expression、Status列。

多说一句,随访信息遵循的规则是,The status indicator, normally 0=alive, 1=dead.
Other choices are TRUE/FALSE (TRUE = death) or 1/2 (2=death)

如果我们手里的输入文件格式跟以上保存的norm.txt相符,就跳过预处理的这一步。

# 开始画图

常见调整参数有颜色、线的类型、是否显示置信区间等
用?ggsurvplot查看更多参数设置

```R
library("survival")
library("survminer")
fit<- survfit(Surv(Months, Status) ~ Expression, data = svData)
ggsurvplot(fit, pval = TRUE,linetype = c("solid", "dashed"), #线的类型
         palette = c("blue","red"),#线的颜色
         legend.title="",legend=c(0.7,0.9),legend.labs=c("High-expression","low-expression"),
         conf.int = F) #不显示置信区间
```

![](https://files.mdnice.com/user/47194/9b0eac92-d851-4a74-a190-83b8cc270514.png)

```R
ggsurvplot(fit, pval = TRUE, linetype = "solid",
         palette =c("blue","red"),
         legend.title="",legend=c(0.7,0.9),legend.labs=c("High-expression","low-expression"),
         conf.int = T,#显示置信区间
         conf.int.style="ribbon",#展示方式
         conf.int.alpha=0.1)#透明度
ggsave(file="20230829.pdf")
# Saving 9.9 x 5.73 in image
# 输出的pdf文件是矢量图,可以在Illustrator等软件里进行字体、字号等编辑操作
```
页: [1]
查看完整版本: 画出优雅的生存曲线