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

如何调整ggsurvplot中分层标识的线条粗细?

解决ggsurvplot图例与risk.table分层线条粗细不一致的问题

ggsurvplot的图例线条和risk.table中的分组标识线条默认由独立参数控制,想要统一两者的粗细,需要分别调整生存曲线图和risk.table的对应元素:

步骤1:基础绘图与对象保存

先生成生存分析模型并绘制带risk.table的基础图,将结果保存为对象以便后续修改:

library(survival)
library(survminer)

# 示例生存数据
set.seed(123)
df <- data.frame(
  time = sample(1:100, 100, replace = TRUE),
  status = sample(0:1, 100, replace = TRUE),
  group = factor(sample(c("A", "B", "C"), 100, replace = TRUE))
)
fit <- survfit(Surv(time, status) ~ group, data = df)

# 生成带风险表的生存图
p <- ggsurvplot(fit, data = df, risk.table = TRUE)

步骤2:调整图例线条粗细

通过修改生存曲线图的图例设置,统一图例中标识线条的粗细:

# 将图例线条粗细设为2(可根据需求修改数值)
p$plot <- p$plot + 
  guides(
    color = guide_legend(override.aes = list(size = 2)),
    linetype = guide_legend(override.aes = list(size = 2))
  )

步骤3:调整risk.table分层标识线条粗细

risk.table是独立的ggplot对象,需要定位其中的分组标识线段图层并修改粗细:

# 找到risk.table中的线段图层
seg_layer_idx <- which(sapply(p$table$layers, function(x) class(x$geom)[1]) == "GeomSegment")
# 修改线条粗细为2(与图例保持一致)
p$table$layers[[seg_layer_idx]]$aes_params$size <- 2

查看最终效果

直接调用保存的对象即可看到线条粗细统一的生存图与risk.table:

p

简化调整方式(按需选择)

如果不需要精准定位图层,也可以直接给risk.table的所有线段设置粗细(可能会影响表格内其他横线,需自行判断):

p$table <- p$table + aes(size = 2) + guides(size = "none")

内容的提问来源于stack exchange,提问作者geek45

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:20:03