如何修改ggsurvplot中的小数分隔符(点替换为逗号)
解决ggsurvplot中小数分隔符替换为逗号的方法
以下是几种可行的实现方式,按需选择:
方法一:全局区域设置(最简单)
直接调整R的区域设置,让所有输出的数字自动用逗号作为小数分隔符。不同系统的locale名称略有差异:
- Linux/macOS:
Sys.setlocale("LC_NUMERIC", "fr_FR.UTF-8") # 法语区域,小数分隔符为逗号
- Windows:
Sys.setlocale("LC_NUMERIC", "French_France.1252")
设置后再运行ggsurvplot,坐标轴、风险表、P值的小数都会自动换成逗号。注意:如果你的系统没安装对应locale,需要先安装(比如Linux下用locale-gen fr_FR.UTF-8)。
方法二:单独调整各组件(更灵活)
如果全局设置影响其他输出,或者需要更精细控制,可以分别修改KM曲线的各个部分:
1. 准备数据和拟合模型
library(survival) library(survminer) library(scales) # 模拟数据 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"), 100, replace = TRUE)) ) fit <- survfit(Surv(time, status) ~ group, data = df)
2. 绘制KM曲线并修改坐标轴
p <- ggsurvplot(fit, data = df, risk.table = TRUE, pval = TRUE) # 修改X、Y轴刻度的小数分隔符 p$plot <- p$plot + scale_x_continuous(labels = format_format(decimal.mark = ",")) + scale_y_continuous(labels = format_format(decimal.mark = ","))
3. 修改风险表的数字格式
风险表是独立的ggplot对象,存放在p$table里,同样调整其坐标轴和文本:
p$table <- p$table + scale_x_continuous(labels = format_format(decimal.mark = ",")) + theme(axis.text.x = element_text(angle = 0)) # 可选,调整X轴文本角度避免重叠
4. 自定义P值格式
手动计算P值并替换小数点为逗号,再传入ggsurvplot:
# 计算P值 p_val <- surv_pvalue(fit)$pval # 格式化P值,替换小数点为逗号 p_val_formatted <- gsub("\\.", ",", sprintf("P = %.3f", p_val)) # 重新绘制并传入格式化后的P值 p <- ggsurvplot(fit, data = df, risk.table = TRUE, pval = p_val_formatted) # 再结合前面的坐标轴调整 p$plot <- p$plot + scale_x_continuous(labels = format_format(decimal.mark = ",")) + scale_y_continuous(labels = format_format(decimal.mark = ",")) p$table <- p$table + scale_x_continuous(labels = format_format(decimal.mark = ","))
最后调用print(p)就能看到所有数字的小数分隔符都换成逗号了。
内容的提问来源于stack exchange,提问作者kobue1
相关产品推荐
相关产品推荐

