来源:R语言统计与绘图 公众号,做学习分享用。
前言
绘制Kaplan-Meier生存曲线需要用到的R包:“survminer”
和“survival”
;如果没有请安装。
install.packages("survminer") #下载survminer包
install.packages("survival") #下载survival包
library(survminer) #加载包
library(survival) # 加载包
导入数据
数据集采用 survival
包的 lung
数据集。
data(lung) # 加载lung数据集
View(lung) # 查看数据集
数据集介绍
?lung # 查询 lung 数据集信息
数据集变量介绍
lung数据集:NCCTG晚期肺癌患者的生存率。
inst:机构代码
time:生存天数
status:生存状态,1为删失,2为死亡
age:年龄
sex:性别,1为男性,2为女性
ph.ecog、ph.karno、pat.karno为评分,这里用不到
meal.cal:每餐摄入的卡路里
wt.loss:体重下降
拟合曲线
fit <- survfit(Surv(time,status) ~ sex, data = lung);fit
简单绘制
ggsurvplot(fit, data = lung)
增加中位生存时间
ggsurvplot(fit, data = lung,
surv.median.line = "hv") # 增加中位生存时间
从图上可以看出,男性的中位生存时间小于女性。
增加置信区间
ggsurvplot(fit, data = lung,
surv.median.line = "hv", # 增加中位生存时间
conf.int = TRUE) # 增加置信区间
累计风险曲线
ggsurvplot(fit, data = lung,
conf.int = TRUE,fun = "cumhaz") # 增加中位生存时间
添加风险表
ggsurvplot(fit, data = lung,
conf.int = TRUE,
risk.table = TRUE)
美化图形
ggsurvplot(fit, data = lung,
conf.int = TRUE,
pval = TRUE,
surv.median.line = "hv",
risk.table = TRUE,
xlab = "Follow up time(d)",
legend = c(0.8,0.75),
legend.title = "",
legend.labs = c("Male", "Female"),
break.x.by = 100)
ggsurvplot()函数
ggsurvplot()函数 # ?ggsurvplot() 查看函数帮助文件
主要参数
ggsurvplot(fit, # 生存对象
data = NULL, # 拟合生存曲线的数据集
fun = NULL, # 常用三个字符参数,"event"绘制累计事件,"cumhaz"绘制累计风险,"pct"绘制生存概率(百分比表示)
color = NULL, # 生存曲线的颜色, 如果层数/组数为1,则直接 color = "blue";如果层数/组数>1,默认使用 color = "strata",按层为生存曲线着色。也可使用参数调色板自定义调色板。
palette = NULL, # 调色板,默认"hue"。其他有"grey", c("blue", "red"),"npg", "aaas", "lancet", "jco", "ucscgb", "uchicago", "simpsons" and "rickandmorty".
linetype = 1, # 线型。可以按"strata"改变线型,或数字向量c(1, 2),或字符向量c("solid", "dashed")
conf.int = FALSE, # 逻辑词,为TRUE则绘制置信区间
pval = FALSE, # 逻辑词为TRUE则p值绘制到图上,为数字则 pval = 0.03,为字符串 则 pval = "The hot p-value is: 0.031"
pval.method = FALSE, # 生存曲线比较的检验方法,仅当 pval = TRUE时, 添加计算P值的检验名称的文本
test.for.trend = FALSE, # 逻辑词,默认为FALSE,为TRUE则返回趋势p值的检验,趋势检验旨在检验生存曲线的有序差异
surv.median.line = "none", # 在中位生存时间绘制水平或者垂直线的字符向量,可用的值包括c("none", "hv", "h", "v").v为垂直,h为水平
risk.table = FALSE, # 图上是否添加风险表,默认不显示,"absolute" or "percentage"分别显示按时间分布的处于风险中的绝对数量和百分比数量,"abs_pct" 显示绝对数量和百分比
cumevents = FALSE, # 是否显示累计事件表,默认不显示
cumcensor = FALSE, # 是否显示累计删失表,默认不显示
tables.height = 0.25, # 主要生存图下所有表格的高度,数值0-1之间
group.by = NULL, # 包含分组变量名称的字符向量,向量长度≤2
facet.by = NULL, #字符向量,其中包含将生存曲线分成多个面板的分组变量的名称。向量长度≤2
add.all = FALSE, # 添加生存曲线到主图中
combine = FALSE,
ggtheme = theme_survminer(), # ggplot2主题名称。 默认值为theme_survminer。允许的值包括ggplot2官方主题:请参阅主题。
tables.theme = ggtheme, ...) # 注意tables.theme是ggtheme的增量。
图标题和轴标签
title: 图表标题
xlab, ylab: 分别指x轴和y轴标签
图例
legend: 指定图例位置。可选“top”,“bottom”,“left”,“right”,“none”等。默认“top”。 legend=“none”删除图例。图例也可用c(x,y)指定,x和y的值应在0到1之间。
legend.title: 图例标题,如legend.title = "Sex",
legend.labs: 指定图例标签的字符向量, 替换fit中strata的名称,顺序应与strata一致。如legend.labs = c("Male", "Female")
坐标轴
break.time.by: 设定坐标轴刻度间距
break.x.by: 设定x轴坐标轴刻度的间距,如break.x.by = 100
break.y.by: 设定y轴坐标轴刻度的间距
surv.scale: 生存曲线的比例转换。允许的值为“默认”或“百分比”
xlim,ylim: 限定x轴和y轴范围,如xlim = c(0,30), ylim = c(0,1)
axes.offset: 逻辑词,默认为TRUE。为FALSE,则图坐标轴从原点开始。
置信区间
conf.int.fill: 置信区间填充的颜色
conf.int.style: 置信区间的类型,有"ribbon", "step"两种.默认为"ribbon"。
conf.int.alpha: 置信区间填充颜色的透明度,数值在0-1之间,0为完全透明,1为不透明。
以上建立在conf.int = TRUE上
P值
pval.size:指定p值文本的大小,默认为 5。
pval.coord: 长度为2的数值向量,指定p值的坐标x,y,如pval.coord = c(x,y)。
pval.method.size: 指定log.rank.weights文本的大小
pval.method.coord: 指定log.rank.weights文本的坐标
log.rank.weights: 计算log-rank检验p值的权重类型的名称。默认survdiff计算常规log-rank test(weights==1)。
以上建立在pval = TRUE上
如:
ggsurvplot(fit, data = lung, pval = TRUE)
ggsurvplot(fit, data = lung, pval = 0.03)
ggsurvplot(fit, data = lung, pval = "The hot p-value is: 0.031")
删失点
censor: 逻辑词,为TRUE,则绘制删失点。
censor.shape:数值或字符,用于指定删失点的形状,默认为"+" (3), 可选"|" (124)。
censor.size: 指定删失点的大小,默认为4.5。
生存表
所有表的常规参数。指定以下参数时,可应用于所有生存表(风险,累积事件和累积删失表)。
tables.col: 生存图下所有表的颜色,默认为 "black", 按层显示则tables.col = "strata".
fontsize: 指定风险表和累积事件表的字体大小。
font.family: 指定文字字体的字符向量,如 font.family = "Courier New".
tables.y.text: 表的y轴刻度标签,默认显示,为FALSE则刻度标签被隐藏
tables.y.text.col: 逻辑词,默认为FALSE,为TRUE,则表的y刻度标签将按层着色。
tables.height: 生存表的高度,数值在0-1之间,默认为0.25.
风险表
risk.table.title: 风险表的标题
risk.table.pos: 指定风险表位置的字符向量,有"out"和"in",out指在生存图外(默认),in指在生存图内。
risk.table.col
risk.table.fontsize
risk.table.y.text
risk.table.y.text.col
risk.table.height
这五个和生存表常规参数意义一样,但是只应用在风险表中。
累计事件表
cumevents.title:累计事件表的标题
cumevents.col
cumevents.y.text
cumevents.y.text
cumevents.height
这四个和生存表常规参数意义一样,但是只应用于累计事件表中。
累计删失表
cumcensor.title: 累计删失表的标题
cumcensor.col
cumcensor.y.text
cumcensor.y.text.col
cumcensor.height
这四个和生存表常规参数意义一样,但是只应用于累计删失表中。
生存图高度
surv.plot.height: 生存图的高度,默认为0.75,当risk.table = FALSE时忽略
字体样式
font.title:标题
font.subtitle:副标题
font.caption:
font.x:x轴
font.y:y轴
font.tickslab: 刻度标签
font.legend:图例
用长度为3的向量分别指定大小、类型 ("plain", "bold", "italic", "bold.italic") 、颜色。
如:font.main = c(16, "bold", "darkblue")
font.x = c(14, "bold.italic", "red")
font.y = c(14, "bold.italic", "darkred")
font.tickslab = c(12, "plain", "darkgreen")
font.x = 14 则只改变字体的大小
font.x = "bold" 则只改变字体类型