如何在svyjskm绘制的KM图中修改坐标轴标签大小与粗体样式?
解决svyjskm绘制KM曲线时调整坐标轴字体的问题
方法一:利用Base绘图系统全局参数调整
svyjskm默认基于R的Base绘图系统,可通过par()函数在绘图前设置全局样式参数,直接生效:
library(survey) data(pbc, package="survival") pbc$randomized <- with(pbc, !is.na(trt) & trt>0) biasmodel <- glm(randomized~age*edema,data=pbc) pbc$randprob <- fitted(biasmodel) dpbc <- svydesign(id=~1, prob=~randprob, strata=~edema, data=subset(pbc,randomized)) s1 <- svykm(Surv(time,status>0)~sex, design=dpbc) # 提前设置坐标轴样式参数 old_par <- par( cex.axis = 1.5, # 刻度数值放大1.5倍 font.axis = 2, # 刻度数值设为粗体 cex.lab = 1.5, # 轴标签放大1.5倍 font.lab = 2 # 轴标签设为粗体 ) # 绘制带风险表的KM曲线 svyjskm(s1, table = TRUE) # 恢复原有绘图参数(可选,避免影响后续绘图) par(old_par)
参数说明:
cex.axis/cex.lab:控制文字大小的倍数,数值越大文字尺寸越大font.axis/font.lab:控制文字样式,2代表粗体,1为常规样式,3为斜体,4为粗斜体
方法二:提取数据用ggplot手动绘制(样式更灵活)
如果偏好ggplot的样式控制逻辑,可以从svykm对象中提取生存数据,自行构建ggplot图形,实现完全自定义:
library(ggplot2) # 从svykm对象中提取生存数据 surv_df <- data.frame( time = s1$time, survival = s1$surv, group = rep(names(s1$strata), s1$strata) ) # 绘制KM曲线并设置样式 ggplot(surv_df, aes(x = time, y = survival, color = group)) + geom_step(linewidth = 1) + labs(x = "Time", y = "Survival Probability") + theme_minimal() + theme( axis.text.x = element_text(size = 14, face = "bold"), axis.text.y = element_text(size = 14, face = "bold"), axis.title.x = element_text(size = 16, face = "bold"), axis.title.y = element_text(size = 16, face = "bold"), legend.title = element_text(size = 14, face = "bold"), legend.text = element_text(size = 12, face = "bold") )
补充:添加风险表(可选)
若需要保留svyjskm自带的风险表,可在ggplot中额外计算各时间点的风险人数并添加图层,注意需匹配svykm的加权逻辑,确保结果一致。
内容的提问来源于stack exchange,提问作者Elena
相关产品推荐
相关产品推荐

