如何用R绘制大肠杆菌基因组Circos图,多轨道对比不同菌株突变
用R的circlize包绘制菌株突变对比Circos图
1. 环境准备
- 安装并加载核心R包circlize(目前R中最常用的Circos图实现工具):
install.packages("circlize") library(circlize)
2. 数据准备
需要整理成包含以下必填字段的数据框:
chromosome:染色体/Contig编号(细菌通常为单个染色体,多质粒样本可按分子类型区分)position:突变位点的基因组坐标strain:菌株名称(用于区分不同环形轨道)mutation_type:突变类型(如SNV、Indel,用于点的颜色区分)
示例模拟数据:
mut_data <- data.frame( chromosome = rep("Chromosome 1", 50), position = sample(1:1000000, 50), strain = sample(c("Strain A", "Strain B", "Strain C"), 50, replace = TRUE), mutation_type = sample(c("SNV", "Indel"), 50, replace = TRUE) )
3. 基础Circos图绘制(匹配目标示例风格)
目标示例核心是环形展示多菌株的突变分布,以下代码实现对应效果:
# 清空原有Circos布局,避免冲突 circos.clear() # 设置全局参数:环形间隙、轨道高度 circos.par(gap.degree = 5, track.height = 0.15) # 初始化环形:以染色体为分组,定义基因组坐标范围 circos.initialize(factors = mut_data$chromosome, xlim = c(0, max(mut_data$position))) # 遍历每个菌株,绘制独立突变轨道 strains <- unique(mut_data$strain) for(s in strains){ strain_subset <- mut_data[mut_data$strain == s, ] # 定义突变类型颜色映射 col_map <- c("SNV" = "#E64B35", "Indel" = "#3182BD") # 创建菌株轨道:添加轨道标签和坐标轴 circos.trackPlotRegion(ylim = c(0, 1), bg.border = NA, track.height = 0.1, panel.fun = function(x, y) { # 添加基因组位置坐标轴 circos.axis(h = "top", labels.cex = 0.6, labels.niceFacing = TRUE) # 添加菌株名称标签 circos.text(CELL_META$xcenter, CELL_META$ylim[2] + 0.1, s, cex = 0.8, adj = c(0.5, 0)) }) # 绘制突变位点散点 circos.trackPoints(strain_subset$position, rep(0.5, nrow(strain_subset)), col = col_map[strain_subset$mutation_type], pch = 16, cex = 0.8) } # 添加图例说明突变类型 legend("bottomright", legend = names(col_map), col = col_map, pch = 16, cex = 0.8)
4. 进阶优化(贴近示例细节)
- 若需展示突变密度(替代散点),用直方图轨道:
circos.trackHist(strain_subset$position, bin.size = 10000, col = "#3182BD", border = NA)
- 优化坐标轴可读性:增加主刻度间隔,让标签自动调整方向
circos.axis(h = "top", major.at = seq(0, max(mut_data$position), by = 200000), labels.cex = 0.6, labels.niceFacing = TRUE)
- 调整轨道布局:修改
track.height缩小轨道高度,或调整gap.degree增大菌株间间隙
5. 关键注意事项
- 多染色体/Contig样本:需为每个分子单独定义
xlim,比如用split函数拆分数据后初始化 - 数据量过大时:减小
cex参数避免点重叠,或使用密度图替代散点 - 配色选择:优先使用专业配色方案(如RColorBrewer),提升图表可读性
内容的提问来源于stack exchange,提问作者mel099
相关产品推荐
相关产品推荐

