如何基于出现频次调整ggplot2热图y轴的因子排列顺序
ggplot2热图按物种在重复样本中的出现频次调整Y轴顺序的方法
问题场景
现有包含数千行的data.frame,示例数据构造代码如下:
rep = c("rep1", "rep1", "rep1","rep2", "rep2", "rep2","rep3", "rep3", "rep3") species = c("a","b","d","b","e","f","b","f","h") value=c(sample.int(100, 9)) df <- data.frame(rep,species,value) df2 <- df %>% mutate(species=factor(species)) %>% arrange(species,rep) # 原始绘图代码 ggplot(df2,aes(rep, species, fill=value))+ geom_tile()
使用上述代码绘制热图时,需要调整Y轴物种的排列顺序:优先展示在所有重复样本中均出现的物种,其次是在2个重复中出现的物种,最后是仅在1个重复中出现的物种,比如示例中物种b(出现在3个重复)排在最前,其次是f(出现在2个重复),最后是其余仅出现1次的物种。由于物种因子数量过多,无法手动逐个调整顺序。
解决方案
直接使用tidyverse生态下forcats包的fct_infreq()函数即可实现,该函数会按照因子的出现频率从高到低自动重排因子水平,刚好匹配上述排序需求,无需手动计算每个物种的出现重复数,修改后的绘图代码如下:
ggplot(df2,aes(rep, fct_infreq(species), fill=value))+ geom_tile()
内容的提问来源于stack exchange,提问作者LDT
相关产品推荐
相关产品推荐

