ggplot2+ggsurvfit生存图问题:左侧留白与风险表间距调整
关于ggsurvfit绘制生存曲线的两个问题解决
问题1:绘图左侧留白不对称,整体偏右的原因及解决
原因
该现象由两个因素共同导致:
add_risktable()默认让风险表的分层标签(strata)左对齐,会占据图形左侧额外空间,拉宽了整个绘图区域的左侧边界。coord_cartesian(xlim=c(0, 100))硬截断了X轴范围,但scale_x_continuous未设置对称的轴扩展参数,默认扩展规则使得X轴左右留白不一致,进一步放大了偏右的视觉效果。
解决方法
可从以下两个方向调整:
- 调整风险表对齐方式:在
add_risktable()中加入align = "right",让分层标签右对齐,减少左侧不必要的空间占用。 - 设置X轴对称扩展:修改
scale_x_continuous的expand参数为对称值,同时配合调整整体图形边距,确保左右留白一致。
修改后的关键代码片段:
scale_x_continuous( breaks = c(0, 25, 50, 75, 100), expand = c(0.02, 0) # 设置对称的X轴扩展 ) + add_risktable( risktable_height = 0.25, align = "right", # 风险表标签右对齐 theme = list( theme_risktable_boxed(axis.text.y.size = 11, plot.title.size = 11), theme(plot.title = element_text(face = "bold")) ) ) + theme(plot.margin = margin(10, 10, 10, 10)) # 调整整体图形边距,按需修改数值
问题2:上移风险表,缩小与绘图区及图例的间距
解决方法
通过ggsurvfit自带参数和ggplot主题设置即可实现:
- 缩短风险表与主图的间距:
add_risktable()的gap参数(默认0.05)控制主图和风险表之间的距离,设置更小的数值(如gap=0.02)即可拉近二者。 - 减小图例与风险表的间距:用
theme()的legend.margin减小图例底部留白,同时调整风险表主题的顶部边距,进一步缩小间距。
修改后的关键代码片段:
theme( legend.position = "bottom", legend.margin = margin(b = 3) # 减小图例底部边距 ) + add_risktable( risktable_height = 0.25, gap = 0.02, # 缩小与主图的间距 theme = list( theme_risktable_boxed(axis.text.y.size = 11, plot.title.size = 11), theme( plot.title = element_text(face = "bold"), plot.margin = margin(t = 3) # 减小风险表顶部边距 ) ) )
内容的提问来源于stack exchange,提问作者user19745561
相关产品推荐
相关产品推荐

