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

R语言富集数据框melt转换后绘制分类气泡图问题求助

你最初绘图错误的核心原因是冗余使用了melt()函数,你的原始数据已经是符合要求的结构化长表格式,可直接作为ggplot输入,melt操作反而将Category、LogP两个字段转为变量值,导致x轴展示字段名而非你需要的两个通路分组。

以下是可实现你需求的完整代码:

第一步:数据预处理

library(tidyverse)
library(data.table)

# 加载你的原始数据后先做清洗
df_clean <- df %>% 
  # 去重:保留每个Category+Description组合的唯一记录(你原始数据中重复项的LogP完全一致)
  distinct(Category, Description, .keep_all = TRUE) %>%
  # 按通路数据库分组,取Top10最显著的通路
  group_by(Category) %>% 
  slice_min(order_by = LogP, n = 10) %>% 
  ungroup() %>%
  # 对通路名称做因子排序,按显著性从高到低排列
  mutate(Description = fct_reorder(Description, LogP, .desc = FALSE))

# 自定义配色,对应两个分组
colours = c("KEGG Pathway" = "#A54657", "Reactome Gene Sets" = "#582630")

第二步:绘制气泡图(图例放置在图内)

ggplot(df_clean, aes(x = Category, y = Description)) + 
  geom_point(aes(size = abs(LogP), fill = Category), alpha = 0.75, shape = 21, stroke = 0.8) + 
  # 调整气泡大小范围,更美观
  scale_size_continuous(range = c(3, 15), name = "-log10(P)") +
  # 自定义填充色
  scale_fill_manual(values = colours, name = "通路数据库") +
  # 翻转y轴顺序,最显著的通路放在最上方
  scale_y_discrete(limits = rev(levels(df_clean$Description))) +
  labs(x = NULL, y = "通路名称") +
  theme_bw() +
  theme(
    axis.text.x = element_text(colour = "black", size = 12, face = "bold"),
    axis.text.y = element_text(colour = "black", face = "bold", size = 11),
    legend.text = element_text(size = 10, face ="bold", colour ="black"),
    legend.title = element_text(size = 12, face = "bold"),
    panel.border = element_rect(colour = "black", fill = NA, size = 1.2),
    # 设置图例在图内的坐标,可根据实际布局调整数值
    legend.position = c(0.85, 0.2),
    legend.background = element_rect(fill = "white", color = "black", size = 0.6)
  )

关键调整说明

  • 直接以Category作为x轴映射,自然得到KEGG Pathway、Reactome Gene Sets两个分组的x轴刻度
  • 对LogP取绝对值映射气泡大小,符合常规富集分析气泡图的展示逻辑:显著性越高,气泡越大
  • 通过legend.position参数设置图例坐标,放在图内空白区域,节省排版空间,数值可根据实际出图效果灵活调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:48:03