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

如何在ggplot中对Grp1、Grp2分组子集并生成区分显示的气泡图?

解决ggplot中同一Pathway两组数据重叠的问题

问题原因

你当前的图表中两组点重叠是因为:

  • 同一ID(pathway)对应的两组Zscore值完全一致
  • 两组点在y轴上处于同一位置,导致视觉上重叠,无法区分

修改方案

通过position_dodge()让同一ID下的两组点在y轴方向错开,同时保留Zscore的真实值,这样就能清晰区分两组数据。以下是修改后的完整代码:

# 构造数据
df <- structure(list(ID = c("pathway1", "pathway2", "pathway3", "pathway4","pathway5", "pathway1", "pathway2", "pathway3", "pathway4", "pathway5"),
               Hit = c(4L, 3L, 3L, 7L, 9L, 6L, 4L, 13L, 6L, 16L),
               Zscore = c(-1.3,-2, 2, 3, 1, -1.3, -2, 2, 3, 1),
               Group = c("Grp1", "Grp1", "Grp1", "Grp1", "Grp1", "Grp2", "Grp2", "Grp2", "Grp2", "Grp2")),
          class = "data.frame", row.names = c(NA, -10L))

library(ggplot2)

f <- ggplot(data = df, aes(Zscore, ID, color = Group)) 
f1 <- f + geom_point(aes(size = Hit), position = position_dodge(width = 0.5)) + # 新增错开位置的参数
  scale_color_manual(
    name = 'Group',
    values = c("Grp1" = 'red', "Grp2" = 'blue')
  ) +
  geom_vline(xintercept = 0, size = 0.2, colour = "blue", linetype = "dotted") +
  scale_size_continuous(breaks = c(3,6,9,13,16)) + # 调整图例断点匹配Hit的实际范围
  theme(panel.background = element_rect(fill = "gray95", colour = "gray95"),
        panel.grid.major = element_line(size = 0.1, linetype = 'solid', colour = "gray90"), 
        panel.grid.minor = element_line(size = 0.1, linetype = 'solid', colour = "gray90"),
        axis.title.y = element_blank()) +
  expand_limits(x = c(-3, 3)) +
  scale_x_continuous(name = 'Z-score', breaks = pretty(df$Zscore)) +
  scale_y_discrete(limits = rev(df$ID)) + 
  theme(axis.text = element_text(face = "bold"))

f1

关键修改说明

  • position = position_dodge(width = 0.5):让同一ID下的两个点在y轴方向错开,width数值可根据视觉效果调整
  • 调整scale_size_continuous的breaks:避免原断点范围过小导致图例无法反映真实数据分布

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:12:32