如何在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
相关产品推荐
相关产品推荐

