You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:52:50