You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:能否用ggplot2绘制连锁不平衡(Linkage disequilibrium)图

用ggplot2绘制连锁不平衡(LD)图表的实现方案

完全可以用ggplot2绘制你需要的连锁不平衡(LD)图表,这类图表通常通过色块和数值标注展示SNP间的LD关联强度(如D'或r²值),能完美匹配你参考的示例样式。

实现步骤

  • 安装依赖包:需要用到ggplot2做可视化,LDheatmap或genetics计算LD值
install.packages(c("ggplot2", "LDheatmap", "genetics"))
library(ggplot2)
library(LDheatmap)
library(genetics)
  • 准备并处理数据
    以内置基因型数据为例,先计算LD(D')值,再整理为ggplot兼容的长格式:
# 加载示例基因型数据
data(genotypes)
# 计算LD值(不直接绘图,仅提取数据)
ld_result <- LDheatmap(genotypes, LDmeasure = "D'", plot = FALSE)
# 转换LD矩阵为长格式数据框
ld_df <- as.data.frame(as.table(ld_result$LDmatrix))
colnames(ld_df) <- c("SNP1", "SNP2", "D_prime")
# 保留上三角区域(含对角线),对应示例的展示形式
ld_df <- ld_df[as.numeric(ld_df$SNP1) <= as.numeric(ld_df$SNP2), ]
  • 绘制LD图
    自定义样式匹配示例的色块+数值标注效果:
ggplot(ld_df, aes(x = SNP1, y = SNP2, fill = D_prime)) +
  geom_tile(color = "white") +
  # 添加D'值标注
  geom_text(aes(label = round(D_prime, 2)), size = 3, color = "black") +
  # 设置蓝-红渐变配色,匹配参考示例
  scale_fill_gradient(low = "blue", high = "red", limits = c(0, 1)) +
  # 保持SNP位点顺序一致
  scale_x_discrete(limits = rownames(ld_result$LDmatrix)) +
  scale_y_discrete(limits = rev(colnames(ld_result$LDmatrix))) +
  labs(title = "连锁不平衡(LD)图谱", x = "SNP位点", y = "SNP位点", fill = "D'值") +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title = element_text(hjust = 0.5)
  )

自定义调整

你可以根据实际需求修改:

  • 替换LDmeasure = "r2"来绘制基于r²的LD图
  • 调整scale_fill_gradient的配色方案
  • 修改geom_text的大小、颜色来优化标注可读性
  • 加入SNP的物理距离信息,在坐标轴下方标注位置

内容的提问来源于stack exchange,提问作者Mateus Piza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:03:21