R语言使用trackViewer绘制基因棒棒糖图去除外显子间空白求助
实现方案
1. 构建无间隔的外显子GRanges对象
直接使用你预计算好的adjust_start和end字段构建外显子特征,天然跳过内含子空白区域:
library(GenomicRanges) library(trackViewer) # 直接用调整后坐标构建外显子对象,无内含子间隔 features <- GRanges("chr1", IRanges(start = exons$adjust_start, end = exons$end, names = paste0("exons", 1:nrow(exons)))) # 设置外显子样式 features$fill <- "lightblue" features$height <- 0.1
2. 校正SNP坐标到无内含子体系
需要先匹配每个SNP所属的原始外显子区间,再通过外显子的坐标偏移规则转换SNP位置:
# 构建原始外显子坐标的GRanges,用于匹配SNP所属外显子 raw_exons_gr <- GRanges("chr1", IRanges(start = exons$Start, width = exons$Length)) # 构建原始SNP坐标的GRanges raw_snp_gr <- GRanges("chr1", IRanges(start = SNP$V1, width = 1)) # 匹配每个SNP对应的外显子(不在外显子区的SNP会自动过滤) ol <- findOverlaps(raw_snp_gr, raw_exons_gr) # 计算调整后的SNP坐标:原始SNP位置减去所属外显子原始起始,加上外显子调整后起始 adjusted_snp_pos <- SNP$V1[queryHits(ol)] - exons$Start[subjectHits(ol)] + exons$adjust_start[subjectHits(ol)] # 构建调整后的SNP GRanges对象 sample.gr <- GRanges("chr1", IRanges(start = adjusted_snp_pos, width = 1, names = paste0("snp", SNP$V1[queryHits(ol)])), color = sample.int(10, length(adjusted_snp_pos), replace = TRUE), border = sample(c("black", "gray80", "gray30"), length(adjusted_snp_pos), replace = TRUE))
3. 绘制无空白的棒棒糖图
lolliplot(sample.gr, features)
如果需要在外显子之间增加微小间隔方便区分,可以给每个外显子的adjust_start和end依次叠加固定偏移值(比如每个外显子间隔10bp),再执行上述步骤即可。
内容的提问来源于stack exchange,提问作者tacrolimus
相关产品推荐
相关产品推荐

