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

如何基于出现频次调整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 03:24:03