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

如何用ggplot2+ggbreak绘制带Y轴断裂的基因曼哈顿图

解决qqman曼哈顿图Y轴断裂+保持原生样式的方法

核心思路

利用qqman预处理好的绘图数据(避免X轴排序混乱),结合ggbreak实现Y轴断裂,同时还原qqman的经典样式。


步骤1:提取qqman预处理的数据

qqman的manhattan()函数可以返回处理好的绘图数据集(包含按染色体顺序排列的因子化CHR列,直接解决X轴排序问题):

library(qqman)
library(ggbreak)
library(ggplot2)

# 假设你的全基因组数据为gwas_data,需包含SNP、CHR、BP、P列
# 仅获取预处理数据,不直接绘图
p <- manhattan(gwas_data, plot = FALSE)
plot_data <- p$data

步骤2:绘制带Y轴断裂的曼哈顿图

基于提取的plot_data,用ggbreak实现Y轴双断裂(8-149、149-300),同时还原qqman的样式细节:

ggplot(plot_data, aes(x = CHR, y = -log10(P), color = as.factor(CHR))) +
  # 绘制散点,匹配qqman点大小
  geom_point(size = 1.2) +
  # 设置Y轴断裂:断裂位置为8和149,分三段显示0-8、149-300
  scale_y_break(c(8, 149), scales = c(0, 8, 149, 300), space = 0.1) +
  # 还原qqman的染色体交替配色
  scale_color_manual(values = rep(c("black", "gray"), 22)) +
  # 添加qqman默认的阈值线:建议阈值(-log10(1e-6)=6,蓝色虚线)、显著阈值(-log10(5e-8)=7.3,红色实线)
  geom_hline(yintercept = c(6, 7.3), linetype = c("dashed", "solid"), color = c("blue", "red")) +
  # 设置X轴标签:仅显示偶数染色体,匹配qqman默认逻辑
  scale_x_discrete(breaks = unique(plot_data$CHR)[seq(2, length(unique(plot_data$CHR)), 2)],
                   labels = unique(plot_data$CHR)[seq(2, length(unique(plot_data$CHR)), 2)]) +
  # 还原qqman的简洁主题
  theme_bw() +
  theme(
    legend.position = "none",
    panel.grid.major.x = element_blank(),
    axis.title.x = element_text("Chromosome"),
    axis.title.y = element_text("-log10(P)")
  )

关键细节说明

  • X轴排序问题:plot_data中的CHR是qqman预先处理好的有序因子,直接使用即可避免手动排序错误。
  • Y轴断裂调整:scale_y_break的space参数可控制断裂处的空白宽度,scales参数可自定义各分段的Y轴范围。
  • 样式还原:通过scale_color_manual、geom_hline和主题设置,完全对齐qqman的原生视觉效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:10:16