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

如何在R中并排展示带统一注释的热图并按C端排序

解决方案

要实现按C-terminus热图的行排序、C-terminus热图在右侧且仅保留一个行注释,需做以下关键修改:

1. 统一两个热图的行顺序

让N-terminus热图的行完全匹配C-terminus热图的行顺序,合并后整体就会按C-terminus的行排序展示:

  • 提取C-terminus热图的行名作为排序基准
  • 重新排列N-terminus热图的行数据
  • 同步调整行注释的行顺序,避免注释错位

2. 保留注释在右侧热图(C-terminus)

保持原代码中仅在C-terminus热图添加right_annotation的设置,确保合并后只有右侧一个注释。

修改后的完整代码:

# 生成C-terminus热图对象
cterm = Heatmap(
  as.matrix(c_term_agg_norm1 %>% mutate_if(is.numeric, function(x) ifelse(is.infinite(x), log2(0.00001), x))),
  show_row_names = TRUE,
  show_column_names = TRUE,
  show_row_dend = FALSE,
  show_column_dend = FALSE,
  cluster_columns = FALSE,
  col = col_fun,
  rect_gp = gpar(col = "white", lwd = 0.5),
  width = w*unit(5, "mm"), 
  height = h*unit(5, "mm"),
  name = "normalized percentage",
  column_title = "C Terminus Cleavage",
  right_annotation = MAP_annot,
  column_split = factor(str_extract(names(c_term_agg_norm1),"[^_]+"))
)

# 获取C-terminus热图的行顺序作为基准
cterm_row_order = rownames(cterm@matrix)

# 调整行注释顺序,与C-terminus热图匹配
MAP_annot_aligned = MAP_annot[cterm_row_order, ]

# 预处理N-terminus数据,按C-terminus的行顺序重新排列
nterm_data = n_term_agg_norm1[-1, ][cterm_row_order, ] %>%
  mutate_if(is.numeric, function(x) ifelse(is.infinite(x), log2(0.00001), x))

# 生成N-terminus热图对象
nterm = Heatmap(
  as.matrix(nterm_data),
  show_row_names = TRUE,
  show_column_names = TRUE,
  show_row_dend = FALSE,
  show_column_dend = FALSE,
  cluster_columns = FALSE,
  col = col_fun,
  rect_gp = gpar(col = "white", lwd = 0.5),
  width = w*unit(5, "mm"), 
  height = h*unit(5, "mm"),
  name = "normalized percentage",
  column_title = "N Terminus Cleavage",
  # 不添加额外注释
  # right_annotation = MAP_annot,
  column_split = factor(str_extract(names(n_term_agg_norm1),"[^_]+"))
)

# 合并热图,保持N-terminus在左、C-terminus在右
combined_heatmap = nterm + cterm
draw(combined_heatmap)

关键改动说明

  • cterm_row_order = rownames(cterm@matrix):提取C-terminus热图的行顺序作为统一基准
  • n_term_agg_norm1[-1, ][cterm_row_order, ]:让N-terminus数据的行严格匹配C-terminus的顺序,确保合并后行对齐且按C-terminus排序
  • MAP_annot_aligned = MAP_annot[cterm_row_order, ]:同步调整注释行顺序,避免注释与热图行错位(若原注释行序已匹配C-terminus,可省略此步)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:10:25