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

如何用R将多数据集合并到同一张散点图中?

问题解答

完全可以用散点图实现三个数据集的合并展示,不需要更换图表类型,只需要通过区分数据来源的视觉特征(比如点的形状、额外分组标识),就能在同一张图里清晰呈现三个数据集的差异。

数据概览

data 1

GO termCountEnrichmentP value
BP1630.0080.37
MF480.0070.33
CC580.0080.39
KEGG270.0080.43

data 2

GO termCountEnrichmentP value
BP1670.010.31
MF500.0080.29
CC500.0060.34
KEGG230.010.37

data 3

GO termCountEnrichmentP value
BP1230.0090.22
MF440.010.22
CC500.0070.24
KEGG140.0090.28

可复现代码(数据部分)

# 生成三个数据集
data_1 <- structure(list(GO.term = c("BP", "MF", "CC", "KEGG"), 
                         Count = c(163L, 48L, 58L, 27L), 
                         Enrichment = c(0.008, 0.007, 0.008, 0.008), 
                         P.value = c(0.37, 0.33, 0.39, 0.43)), 
                    class = "data.frame", row.names = c(NA, 4L))

data_2 <- structure(list(GO.term = c("BP", "MF", "CC", "KEGG"), 
                         Count = c(167L, 50L, 50L, 23L), 
                         Enrichment = c(0.01, 0.008, 0.006, 0.01), 
                         P.value = c(0.31, 0.29, 0.34, 0.37)), 
                    class = "data.frame", row.names = c(NA, 4L))

data_3 <- structure(list(GO.term = c("BP", "MF", "CC", "KEGG"), 
                         Count = c(123L, 44L, 50L, 14L), 
                         Enrichment = c(0.009, 0.01, 0.007, 0.009), 
                         P.value = c(0.22, 0.22, 0.24, 0.28)), 
                    class = "data.frame", row.names = c(NA, 4L))

合并数据集并绘制散点图的实现代码

先给每个数据集添加分组标识,合并成一个数据框后,用点的形状区分不同数据集,同时保留原有的Count(点大小)和P.value(点颜色)映射:

library(ggplot2)
library(dplyr)

# 添加分组标识并合并数据
combined_data <- bind_rows(
  data_1 %>% mutate(Group = "data_1"),
  data_2 %>% mutate(Group = "data_2"),
  data_3 %>% mutate(Group = "data_3")
)

# 绘制合并后的散点图
ggplot(combined_data, aes(x = Enrichment, y = GO.term)) +
  geom_point(aes(size = Count, color = P.value, shape = Group), alpha = 0.8) +
  # 优化视觉效果
  scale_color_viridis_c(option = "plasma", name = "P value") +
  scale_size_continuous(name = "Gene Count") +
  scale_shape_manual(values = c(16, 17, 18), name = "Dataset") +
  labs(x = "Enrichment", y = "GO/KEGG Term", title = "Enrichment Analysis across 3 Datasets") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

补充优化方案

如果担心同位置点重叠影响观察,可以:

  • 给点添加轻微位置偏移:geom_point(..., position = position_jitter(width = 0.0005))
  • 降低点的透明度(已在代码中设置alpha=0.8)
  • 若不需要严格在同一张图展示,也可以用分面图:+ facet_wrap(~Group)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:52:21