如何让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
相关产品推荐
相关产品推荐

