如何调整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
相关产品推荐
相关产品推荐

