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

如何在ggplot热力图中按Haul 1的Percent值降序排列Species轴

按指定分组数值排序ggplot热力图Y轴物种

要实现仅基于Haul 1的Percent值降序排列Y轴的Species,不能直接用reorder()(它默认会计算每个Species所有Percent值的均值来排序),需要先提取Haul=1对应的数值确定排序顺序,再将Species转为因子指定水平。

解决步骤

  1. 提取Haul=1对应的Species排序顺序
    从数据集中筛选Haul为1的行,按Percent降序排列后提取Species名称:

    # 先加载dplyr,未安装则先执行install.packages("dplyr")
    library(dplyr)
    sorted_species <- data[data$Haul == 1, ] %>% 
      arrange(desc(Percent)) %>% 
      pull(Species)
    

    运行后sorted_species结果为c("b", "c", "d", "a"),完全符合你的期望顺序。

  2. 应用排序规则绘制热力图
    有两种方式可以应用这个排序:

    • 方法一:提前修改数据集
      将原数据的Species列转为指定水平的因子,再用你原本的ggplot代码绘制:
      data$Species <- factor(data$Species, levels = sorted_species)
      
      ggplot(data, aes(Haul, Species)) + 
        geom_tile(aes(fill = Percent)) + 
        scale_fill_gradient(low = "white", high = "red") + 
        labs(fill = "% Sites")+ 
        theme_bw()
      
    • 方法二:直接在ggplot中指定
      无需修改原数据集,直接在aes参数中设置因子水平:
      ggplot(data, aes(Haul, factor(Species, levels = sorted_species))) + 
        geom_tile(aes(fill = Percent)) + 
        scale_fill_gradient(low = "white", high = "red") + 
        labs(fill = "% Sites", y = "Species")+ 
        theme_bw()
      

你的原始数据与代码

数据集构造代码

Species = rep(c("a","b","c","d"),3)
Haul = rep(c(1,2,3),4)
Percent = c(25,0,25,50,25,0,75,0,50,100,0,50)
data = data.frame(Species, Haul, Percent)

原尝试代码的问题

你之前用reorder(Species, Percent)时,它会对每个Species的所有Percent值取均值来排序:

  • a的均值:(25+25+100)/3 = 50
  • b的均值:(0+0+0)/3 = 0
  • c的均值:(25+75+0)/3 ≈ 33.33
  • d的均值:(50+50+50)/3 = 50
    最终排序为b、c、a/d,自然不符合仅用Haul1数值排序的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:09:21