如何在R语言中绘制按蛋白强度着色的点密度维恩图?
在R中实现带蛋白强度着色的点密度维恩图
完全可以实现,下面是两种实用方案,无需依赖Python:
方案一:使用ggVennDiagram(推荐,基于ggplot2)
这个包能快速生成维恩图框架,结合ggplot2的图层可轻松添加散点并按蛋白强度着色,灵活性极强。
步骤1:安装并加载依赖包
install.packages("ggVennDiagram") install.packages("ggplot2") library(ggVennDiagram) library(ggplot2)
步骤2:整理数据集
假设你的数据是包含蛋白归属与强度的数据框proteins,结构如下:
| protein_id | in_A | in_B | in_C | in_D | intensity |
|---|---|---|---|---|---|
| P01 | TRUE | TRUE | FALSE | FALSE | 12.3 |
| P02 | TRUE | TRUE | FALSE | FALSE | 9.7 |
如果你的数据是集合形式(每个集合为蛋白ID向量),可按以下方式转换为逻辑数据框:
# 替换为你的实际集合数据 set_A <- c("P01", "P02", "P03", "P04", "P05", "P06", "P07", "P08", "P09", "P10") set_B <- c("P01", "P02", "P03", "P04") set_C <- c("P03", "P04", "P05", "P06") set_D <- c("P05", "P06", "P07", "P08") # 生成包含归属与强度的数据框 proteins <- data.frame( protein_id = unique(c(set_A, set_B, set_C, set_D)), in_A = unique(c(set_A, set_B, set_C, set_D)) %in% set_A, in_B = unique(c(set_A, set_B, set_C, set_D)) %in% set_B, in_C = unique(c(set_A, set_B, set_C, set_D)) %in% set_C, in_D = unique(c(set_A, set_B, set_C, set_D)) %in% set_D, intensity = rnorm(length(unique(c(set_A, set_B, set_C, set_D))), mean = 10, sd = 2) # 替换为你的实际强度数据 )
步骤3:绘制点密度维恩图
# 生成维恩图区域坐标与蛋白对应点的位置 venn_data <- process_data(list(A=set_A, B=set_B, C=set_C, D=set_D)) venn_coords <- generate_points(venn_data) %>% left_join(proteins, by = c("name" = "protein_id")) # 叠加轮廓与着色散点 ggplot() + # 添加维恩图轮廓 geom_polygon(data = venn_data@region, aes(x=x, y=y, group=id), fill="transparent", color="black") + # 添加蛋白点,按强度映射颜色 geom_point(data = venn_coords, aes(x=x, y=y, color=intensity), alpha=0.7, size=2) + # 设置颜色渐变(可自定义) scale_color_viridis_c(option = "plasma", name = "蛋白强度") + # 隐藏冗余坐标轴 theme_void() + theme(legend.position = "right")
方案二:使用venn包
venn包支持直接绘制带点的维恩图,操作更简洁:
install.packages("venn") library(venn) # 构造集合列表 sets <- list(A=set_A, B=set_B, C=set_C, D=set_D) # 绘制带着色点的维恩图 venn(sets, points = TRUE, col.points = proteins$intensity, cex.points = 2, legend = TRUE, main = "蛋白组学集合点密度维恩图") # 添加强度颜色图例 colorbar(proteins$intensity, main = "蛋白强度")
优化提示
- 若蛋白数量过多导致点重叠,可降低
alpha(透明度)或size(点大小)优化显示。 - 颜色渐变方案可自定义,例如用
scale_color_gradient(low="blue", high="red")替换viridis色系。
内容的提问来源于stack exchange,提问作者Corey Model
相关产品推荐
相关产品推荐

