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

如何让pheatmap按输入基因列表的顺序排列行?

解决pheatmap基因顺序与输入列表不一致的问题

问题出在dplyr::filter()搭配%in%筛选时,返回的行顺序是原数据框中基因出现的顺序,而非你定义的hit.ecm列表顺序。下面是几种高效的批量排序方法,无需手动指定行索引:

方法1:用dplyr的slice_match(推荐,dplyr 1.1.0+版本支持)

直接根据行名匹配hit.ecm的顺序重新排列:

library(dplyr)
hit.ecm.data_ordered <- hit.ecm.data |> 
  slice_match(row.names() == hit.ecm)

方法2:将行名转为因子后排序

把行名转换成因子,指定因子水平为hit.ecm的顺序,再按因子排序:

hit.ecm.data_ordered <- hit.ecm.data |> 
  mutate(gene = row.names()) |> 
  mutate(gene = factor(gene, levels = hit.ecm)) |> 
  arrange(gene) |> 
  select(-gene) |> 
  tibble::column_to_rownames("gene") # 恢复行名格式

方法3:Base R直接索引

利用行名直接按hit.ecm顺序取行,简单高效:

hit.ecm.data_ordered <- hit.ecm.data[hit.ecm, ]

注:因为你已经用%in%筛选过,hit.ecm里的基因都存在于hit.ecm.data中,所以直接索引不会报错。

之后用排序好的数据框绘制热图即可:

hm_hitecmdata <- pheatmap(hit.ecm.data_ordered,
         main="ECM Markers",
         cluster_rows = F,
         cluster_cols = F,
         scale="row",
         show_rownames = T,
         show_colnames = F,
         border_color = F)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:31:07