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

如何调整ggplot2绘制的Cleveland点图y轴排列顺序

Hallmark Cleveland点图Y轴按总得分降序排列实现方法

ggplot2绘制分类轴时,默认按照因子型变量的水平顺序、字符型变量的字母顺序排列分类,你只需要提前按规则设定Hallmarks列的因子水平,即可实现目标排序效果,不需要大幅修改原有绘图逻辑。

步骤1:计算总得分并重排Hallmark顺序

以下两种方法选一种运行即可:

  • 基础R实现(无需安装额外依赖包)
# 按Hallmark分组计算所有Status对应的富集得分总和
hallmark_es_sum <- aggregate(`Enrichment Scores` ~ Hallmarks, data = Table, FUN = sum)
# 按总得分降序排列,提取排序后的Hallmark名称
ordered_hallmark_list <- hallmark_es_sum$Hallmarks[order(hallmark_es_sum$`Enrichment Scores`, decreasing = TRUE)]
# 将Hallmarks列转换为因子,按总得分降序设定水平
Table$Hallmarks <- factor(Table$Hallmarks, levels = ordered_hallmark_list)
  • dplyr实现(适配tidyverse数据分析流程)
library(dplyr)
Table <- Table %>%
  group_by(Hallmarks) %>%
  # 计算每个Hallmark对应的总富集得分
  mutate(total_es = sum(`Enrichment Scores`)) %>%
  ungroup() %>%
  # reorder第二个参数加负号代表按降序排列
  mutate(Hallmarks = reorder(Hallmarks, -total_es))

如果你不想修改原始数据框的结构,可以跳过因子转换步骤,直接在绘图代码中添加scale_y_discrete(limits = ordered_hallmark_list)即可实现相同排序效果。


步骤2:优化并运行绘图代码

原代码中aes映射内不需要重复写Table$前缀,否则容易出现数据映射错误;另外调整了点和线的图层顺序,避免连线遮盖散点,修正后代码如下:

library(ggplot2)
ggplot(Table, aes(x = `Enrichment Scores`, y = Hallmarks)) + 
  geom_line(aes(group = Hallmarks)) +
  geom_point(aes(color = Status)) + 
  geom_vline(xintercept = ES_cutoff, color = "blue", linetype = "dashed", linewidth = 1) +
  ggtitle("Hallmarks")

注:ggplot2 3.4.0及以上版本中,线条粗细参数已从size更新为linewidth,使用旧参数会出现警告但不影响运行,可根据自身安装版本调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:36:26