BioF3 FigCode · SCI 绘图代码集

一致性分析图(Bland-Altman Plot)

导出日期:2026年6月27日

分类:分布可视化 | 依赖包:ggplot2

解决的生物学问题

新的测量方法和金标准是不是可以互换?系统性偏差有多大?

应用场景

输入数据格式

数据框:method1, method2(同一批样本两次测量)

关键参数

快速开始

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 --- 标注的段落是示例数据生成代码。替换为自己的数据时,保持列名一致即可:

延伸阅读