BioF3 FigCode · SCI 绘图代码集
一致性分析图(Bland-Altman Plot)
分类:分布可视化 | 依赖包:ggplot2
解决的生物学问题
新的测量方法和金标准是不是可以互换?系统性偏差有多大?
应用场景
- 新仪器/试剂盒与金标准对比
- 批次重复性评估
- 不同测序平台同基因表达对比
- 蛋白定量方法间一致性
输入数据格式
数据框:method1, method2(同一批样本两次测量)
关键参数
- conf.int.level = 0.95(一致性界限)
- difference.type = "absolute" / "percentage" / "ratio"
- graph.sys = "ggplot2"
快速开始
1. 直接在线运行
打开 FigCode 在线绘图,点击本工具卡片的"在线绘图"按钮即可用内置示例数据出图,零环境配置。
2. 本地复现
下载脚本和示例数据,本地 RStudio 运行:
# 下载
curl -O https://<your-site>/figcode/scripts/bland-altman.R
curl -O https://<your-site>/figcode/data/bland-altman.csv
3. 安装依赖
# CRAN 包
install.packages(c("ggplot2"))
# Bioconductor 包(如需)
# BiocManager::install(c())
完整代码
library(ggplot2)
# --- Demo data ---
set.seed(42)
n <- 100
true_val <- rnorm(n, 100, 20)
method1 <- true_val + rnorm(n, 0, 4)
method2 <- true_val + rnorm(n, 1, 5) + 0.02 * true_val # systematic + proportional bias
df <- data.frame(
mean = (method1 + method2) / 2,
diff = method1 - method2
)
# --- Limits of agreement ---
mean_diff <- mean(df$diff)
sd_diff <- sd(df$diff)
upper_lim <- mean_diff + 1.96 * sd_diff
lower_lim <- mean_diff - 1.96 * sd_diff
# --- Plot ---
ggplot(df, aes(mean, diff)) +
geom_point(alpha = 0.6, color = "#0f172a") +
geom_hline(yintercept = mean_diff, linetype = "solid", color = "#dc2626") +
geom_hline(yintercept = c(upper_lim, lower_lim),
linetype = "dashed", color = "#2563eb") +
annotate("text", x = max(df$mean), y = mean_diff,
label = sprintf("Mean diff = %.2f", mean_diff),
hjust = 1, vjust = -0.4, size = 3.5, color = "#dc2626") +
annotate("text", x = max(df$mean), y = upper_lim,
label = sprintf("+1.96 SD = %.2f", upper_lim),
hjust = 1, vjust = -0.4, size = 3.5, color = "#2563eb") +
annotate("text", x = max(df$mean), y = lower_lim,
label = sprintf("-1.96 SD = %.2f", lower_lim),
hjust = 1, vjust = 1.4, size = 3.5, color = "#2563eb") +
labs(title = "Bland-Altman Plot",
x = "Mean of Method 1 and 2",
y = "Difference (Method 1 - Method 2)") +
theme_classic()
替换为自己的数据
脚本中以 # --- Demo data --- 标注的段落是示例数据生成代码。替换为自己的数据时,保持列名一致即可:
- 输入格式:数据框:method1, method2(同一批样本两次测量)
- 使用
read.csv()/readRDS()读取本地文件
延伸阅读
- 后续将补充配套教程
- 出现 bug?欢迎在 FigCode 页面 点击对应卡片,在评论区留言。