如何使用metaviz包调整森林图标签的小数位数?
调整metaviz森林图CI标注的小数位数
问题描述
使用metaviz包的viz_forest函数绘制森林图时,右侧带置信区间(CI)的估计值默认只保留两位小数,需要修改为保留三位小数。
原代码:
viz_forest(x = dfamce_ordered[1:20, c("amce", "std")], study_labels = dfamce_ordered[1:20, c("country")], summary_label = "Summary Effect", xlab = "AMCE", annotate_CI = TRUE)
数据:
dfamce_ordered <- structure(list(amce = c(0.102243018346973, 0.0682493096502726, 0.0669067622543539, 0.0599407268674782, 0.0504396688405717, 0.0484962116195263, 0.0457041669923713, 0.0430856080509793, 0.0414650636376924, 0.0388962366915576, 0.0313556995623549, 0.0308907944434052, 0.027261193097714, 0.0270736858953663, 0.0185393787585495, 0.013927001415788, 0.00989105057091642, 0.00558431178605058, -0.00328687062104834, -0.0378235020967646), std = c(0.0121135533945813, 0.0126226498023255, 0.0124988950034267, 0.0121412322564469, 0.0112794869488059, 0.0119370400101144, 0.0125916409337608, 0.0116812636593066, 0.0116262083546671, 0.0119836659476091, 0.0124695971997358, 0.01251991561798, 0.0114894773255983, 0.012538903134963, 0.0131449572085337, 0.0134171003637553, 0.0144683803996521, 0.0128400262884722, 0.0119044068536946, 0.0123140943445314), country = c("Brazil", "Spain", "Mexico", "Denmark", "Argentina", "Japan", "Turkey", "Germany", "Romania", "Hungary", "USA", "Kenya", "South Africa", "India", "Nigeria", "Lithuania", "Ukraine", "Morocco", "Malaysia", "Indonesia")), class = "data.frame", row.names = c(NA, -20L))
解决方案
viz_forest没有直接设置小数位数的参数,但可以通过自定义标注函数实现三位小数显示:
- 自定义格式化函数,计算95%置信区间并将所有数值格式化为三位小数;
- 在
viz_forest中指定自定义函数,同时关闭默认标注逻辑。
修改后的代码:
# 自定义标注函数:保留三位小数并格式化CI format_ci_3digits <- function(est, se) { lower <- est - 1.96 * se upper <- est + 1.96 * se # 格式化估计值和CI为三位小数 sprintf("%.3f (%.3f, %.3f)", est, lower, upper) } # 调用viz_forest,使用自定义标注函数 viz_forest(x = dfamce_ordered[1:20, c("amce", "std")], study_labels = dfamce_ordered[1:20, c("country")], summary_label = "Summary Effect", xlab = "AMCE", annotate_CI = FALSE, # 关闭默认标注 annotate_fun = format_ci_3digits) # 使用自定义函数
说明
- 函数中的
1.96对应95%置信区间的临界值,若需其他置信水平可替换(如99%用2.576); sprintf("%.3f", ...)是核心格式化语句,%.3f表示保留三位小数;- 必须关闭
annotate_CI = FALSE,避免默认标注和自定义标注重复显示。
内容的提问来源于stack exchange,提问作者cmalone
相关产品推荐
相关产品推荐

