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

使用qqman包绘制曼哈顿图报错:need finite 'ylim' values

使用qqman绘制曼哈顿图时出现"need finite 'ylim' values"报错的解决方案

问题描述

我使用qqman包基于4组不同的汇总统计量绘制曼哈顿图,前两张图正常生成无报错,但第三张图执行时出现报错。搜索报错信息后得知可能是数据中存在非数值型值,但检查后发现仅SNP列不是数值型,而前两张图的数据集同样存在这个情况。

绘制前两张图和第三张图的代码完全一致,仅替换了文件名和图名中的数字,代码如下:

data = fread("/z/Comp/lu_group/Members/jwlorge/ATN/scripts/data/temp_gwas/output_3/all_chunks_output_3.txt.gz", fill=TRUE, header=TRUE)
data$CHR = as.numeric(as.factor(data$CHR))
data$BP = as.numeric(data$BP)
data$Pval_Estimate = as.numeric(data$Pval_Estimate)
s = length(unique(data$SNP))
jpeg('corrplot3.jpg')
manhattan(data,chr="CHR", bp="BP", p="Pval_Estimate", na.action=TRUE, main = "Factor 3", sub = paste0(s, " SNPs"))
dev.off()

报错出现在manhattan()函数执行阶段,完整报错信息:

Error in plot.window(...) : need finite 'ylim' values
Calls: manhattan ... do.call -> plot -> plot.default -> localWindow -> plot.window

可能的原因及排查修复步骤

  • P值列存在异常值:曼哈顿图的Y轴基于-log10(P值)计算,若第三组数据的Pval_Estimate列出现以下情况,会导致Y轴范围无法确定:
    • 所有P值均为1(-log10(1)=0,无有效波动范围)
    • 存在大于1或小于0的非法P值(会导致-log10()返回Inf或NaN)
    • 大量/全部P值为NA(转换numeric时产生的无效值)
      运行以下代码排查:
    # 查看P值的有效范围
    range(data$Pval_Estimate, na.rm = TRUE)
    # 统计P值列的NA数量
    sum(is.na(data$Pval_Estimate))
    # 统计非法P值的数量
    sum(data$Pval_Estimate > 1 | data$Pval_Estimate < 0, na.rm = TRUE)
    
  • 染色体或碱基对列无有效数据:若CHR或BP列全部为NA,或没有有效数值,会导致绘图时无法确定X轴范围,进而影响Y轴计算。排查代码:
    sum(is.na(data$CHR))
    sum(is.na(data$BP))
    
  • na.action参数设置错误:na.action参数需要传入处理NA的函数(如na.omit),而非布尔值TRUE。错误的参数会导致无效数据未被过滤,进而干扰坐标轴计算。修改为:
    manhattan(data,chr="CHR", bp="BP", p="Pval_Estimate", na.action=na.omit, main = "Factor 3", sub = paste0(s, " SNPs"))
    
  • 数据集为空或无有效行:检查第三组数据的读取结果,是否存在读取后数据为空的情况:
    nrow(data)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:01:06