如何在Circos热图中为特定值添加对应图案?
环形热图添加特定图案的实现方案
核心思路
借助circlize绘制热图时的cell_fun参数,在每个热图单元格渲染完成后,判断单元格对应的值,再调用grid包的绘图工具为指定值添加对应图案。
具体实现步骤
假设你原本的热图基于circos.heatmap()函数绘制,按以下方式修改即可:
- 加载依赖包
确保提前加载所需工具包:
library(circlize) library(grid)
- 自定义单元格绘制函数
编写cell_fun函数,完成默认单元格绘制后,根据值添加对应图案:
custom_cell_fun <- function(j, i, x, y, width, height, fill) { # 先绘制基础热图单元格 grid.rect(x = x, y = y, width = width, height = height, gp = gpar(fill = fill, col = NA)) # 获取当前单元格的对应值(根据你的数据结构调整取值方式) cell_value <- your_data[i, j] # 为"DeH"添加条纹图案 if(cell_value == "DeH") { line_count <- 5 # 控制条纹数量 line_gap <- height / (line_count + 1) for(k in 1:line_count) { grid.lines(x = c(x - width/2, x + width/2), y = c(y - height/2 + k*line_gap, y - height/2 + k*line_gap), gp = gpar(col = "black", lwd = 1)) } } # 为"DuN"添加圆形图案 else if(cell_value == "DuN") { grid.circle(x = x, y = y, r = min(width, height)/3, gp = gpar(col = "black", fill = NA, lwd = 1)) } }
- 修改热图绘制代码
在circos.heatmap()中指定cell_fun为自定义函数:
# 初始化环形布局(替换为你的实际布局参数) circos.initialize(factors = your_factors, x = your_x_data) circos.trackPlotRegion(ylim = c(0, nrow(your_data)), track.height = 0.4, bg.border = NA) # 绘制带图案的热图 circos.heatmap(your_data, cell_fun = custom_cell_fun, col = your_color_palette, # 保留你原有的配色等参数 heatmap_height = 0.3) # 结束环形布局 circos.clear()
注意事项
- 替换代码中
your_data、your_factors、your_x_data、your_color_palette为你实际使用的变量名;如果热图对应三个数据框,可通过j/i的索引范围判断当前单元格所属数据框,再匹配对应值。 - 图案样式可按需调整:比如条纹的密度、圆形的大小、线条颜色/粗细,可修改
gpar()中的参数(col/lwd)或条纹数量、圆半径。
内容的提问来源于stack exchange,提问作者Av65
相关产品推荐
相关产品推荐

