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

如何在Circos热图中为特定值添加对应图案?

环形热图添加特定图案的实现方案

核心思路

借助circlize绘制热图时的cell_fun参数,在每个热图单元格渲染完成后,判断单元格对应的值,再调用grid包的绘图工具为指定值添加对应图案。

具体实现步骤

假设你原本的热图基于circos.heatmap()函数绘制,按以下方式修改即可:

  1. 加载依赖包
    确保提前加载所需工具包:
library(circlize)
library(grid)
  1. 自定义单元格绘制函数
    编写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))
  }
}
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:10:53