当前位置: 首页 > news >正文

R 语言 eulerr 包绘制韦恩图:比例精准

在数据可视化中,韦恩图是展示多组数据交集关系的常用工具,尤其在生物信息(如基因差异表达分析)、统计分析等领域高频使用。但传统绘图工具常面临椭圆比例失衡、数值显示混乱、样式调整繁琐等问题,而 R 语言的eulerr包恰好能解决这些痛点 —— 它支持按数据比例自动适配图形,同时提供丰富的自定义参数,新手也能快速画出专业级韦恩图。本文将从包加载、数据准备、基础绘图到高级美化,一步步带大家掌握eulerr包的使用方法,所有代码可直接复制运行。

一、前期准备:安装并加载 eulerr 包

首先需确保eulerr包已安装,若未安装,可通过install.packages()函数完成安装,再用library()加载包。代码如下:

# 检查并安装eulerr包(仅首次使用需执行安装)
if (!require(eulerr)) {install.packages("eulerr")  # 从CRAN仓库安装
}
library(eulerr)  # 加载包

二、数据准备:构建韦恩图所需的交集统计数据

eulerr包绘图的核心是 **“分组 - 交集” 统计向量 **,需明确每组数据的独立数量及各组间的交集数量。以生物信息中 “多条件基因差异表达分析” 为例,假设我们有 3 个实验条件,需统计 “仅某条件特有基因数”“某两个条件共有基因数”“三个条件共有基因数”,具体数据构建如下:

# 设置随机种子(保证后续绘图结果可重复)
set.seed(123)# 构建基因集合交集统计向量
# 命名规则:独立组直接用组名,交集组用"组1&组2&..."格式
gene_data <- c("Condition1" = 150,          # 仅Condition1特有的基因数"Condition2" = 200,          # 仅Condition2特有的基因数"Condition3" = 180,          # 仅Condition3特有的基因数"Condition1&Condition2" = 50,# Condition1与Condition2共有的基因数"Condition1&Condition3" = 40,# Condition1与Condition3共有的基因数"Condition2&Condition3" = 60,# Condition2与Condition3共有的基因数"Condition1&Condition2&Condition3" = 20  # 三个条件共有的基因数
)# 可选:查看数据结构,确认无格式错误
print(gene_data)

实际应用提示:

若需基于原始数据(如基因表达矩阵)统计交集,可先通过DESeq2limma包完成差异表达分析,得到每个基因在各条件下的 “是否差异表达” 逻辑向量(如cond1_decond2_decond3_de),再用table()函数统计交集:

# 示例:基于逻辑向量统计交集
intersection_counts <- table(cond1_de, cond2_de, cond3_de)
# 后续需将table结果整理为上述"组名-数值"的向量格式

三、基础绘图:快速生成比例精准的韦恩图

eulerr包绘图分两步:先用euler()函数拟合数据(按数据比例计算图形位置),再用plot()函数可视化。基础款韦恩图代码如下:

# 1. 拟合数据(核心步骤,自动计算图形比例)
basic_fit <- euler(gene_data)# 2. 绘制基础韦恩图
plot(x = basic_fit,          # 传入拟合好的数据对象main = "基础韦恩图(eulerr包)",  # 图标题main.cex = 1.2          # 标题字体大小
)

基础图特点:

  • 椭圆比例完全匹配数据量(如 Condition2 独立基因数最多,对应椭圆面积最大);
  • 自动标注分组名称,无冗余样式,适合快速查看数据关系。

四、样式美化:从实用到专业的 3 种进阶方案

基础图满足 “能用”,但实际报告或论文中需更精准的信息展示(如数值、百分比)和更美观的样式。以下提供 3 种常用美化方案,可根据需求选择。

方案 1:显示数值 + 百分比,增强信息密度

在图中直接标注 “绝对数量” 和 “百分比”,方便读者快速获取具体数据,同时调整颜色和边框提升可读性:

plot(x = basic_fit,main = "韦恩图(含数值与百分比)",  # 图标题main.cex = 1.2,# 核心:设置数值与百分比显示quantities = list(type = c("counts", "percent"),  # 同时显示"数量"和"百分比"fontsize = 10,                  # 数值字体大小fontface = "italic",            # 数值字体样式(斜体)col = "black"                   # 数值字体颜色),# 填充色设置(莫兰迪色系,低饱和度更显专业)fills = list(fill = c("#FF6B6B", "#4ECDC4", "#556270"),  # 三组颜色alpha = 0.7                                 # 透明度(避免颜色刺眼)),# 边框设置edges = list(col = "gray40",  # 边框颜色(浅灰,不抢焦点)lwd = 2          # 边框粗细),# 分组标签设置labels = list(font = 2,        # 字体样式(粗体)cex = 1.2        # 标签字体大小)
)

方案 2:添加图例,适配多组数据场景

当分组名称较长或需更清晰的分组说明时,可添加图例,并调整颜色为柔和的浅色系,适合汇报场景:

plot(x = basic_fit,main = "韦恩图(带图例)",main.cex = 1.2,# 仅显示数值(避免信息过载)quantities = TRUE,  # 简化写法,默认显示countsquantities.fontsize = 10,# 填充色(浅色系,适合汇报PPT)fills = c("lightblue", "lightgreen", "lightcoral"),fills.alpha = 0.8,# 边框设置(深色细边框,突出图形轮廓)edges = list(col = "darkblue",lwd = 1.5,lty = 1  # 边框线型(实线)),# 分组标签(深红色,增强辨识度)labels = list(col = "darkred",font = 4,  # 字体样式(粗斜体)cex = 1.1),# 图例设置(放右侧,不遮挡图形)legend = list(side = "right",  # 图例位置(右側)labels = c("实验条件1", "实验条件2", "实验条件3"),  # 图例标签(中文适配)cex = 0.9,       # 图例字体大小bty = "n"        # 去除图例边框(更简洁))
)

方案 3:深色主题 + 高对比度,适配论文插图

论文插图常需高对比度以保证印刷清晰,深色填充 + 白色文字的组合视觉效果突出,同时调整标题和图例位置提升整体协调性:

plot(x = basic_fit,# 标题精细化设置(深蓝色粗体,突出主题)main = list(label = "韦恩图(深色主题)",cex = 1.5,font = 2,col = "darkblue"),# 数值与百分比(白色文字,与深色背景对比)quantities = list(type = c("percent", "counts"),  # 先显示百分比,再显示数量font = 2,        # 粗体cex = 0.8,       # 字体大小col = "white"    # 文字颜色),# 深色填充(饱和度高,区分度强)fills = list(fill = c("#1B9E77", "#D95F02", "#7570B3"),alpha = 0.8      # 适当透明,避免过于厚重),# 白色边框(强化图形轮廓,与深色填充对比)edges = list(col = "white",lwd = 2.5        # 边框稍粗,提升视觉冲击),# 分组标签(白色粗体,清晰识别)labels = list(col = "white",font = 2,cex = 1.2),# 图例放底部(横向排列,节省空间)legend = list(side = "bottom",labels = c("条件1", "条件2", "条件3"),cex = 0.9,col = "darkblue",  # 图例文字颜色与标题呼应inset = 0.05       # 图例与图形的间距(避免重叠))
)

五、常见问题与解决方案

  1. 椭圆重叠异常:若出现图形重叠混乱,需检查数据是否符合 “无矛盾”(如某交集数量大于独立组数量),可通过basic_fit$residuals查看拟合残差,残差接近 0 说明拟合良好;
  2. 中文显示乱码:若绘图中中文(如标题、图例)显示为方框,需在plot()前设置中文字体,如par(family = "SimHei")(Windows 系统)或par(family = "Arial Unicode MS")(Mac 系统);
  3. 导出图片模糊:建议用png()pdf()函数导出矢量图,避免拉伸模糊,示例:

    r

    # 导出为高清PNG图
    png("eulerr_venn.png", width = 800, height = 600, res = 300)
    plot(basic_fit, ...)  # 此处放入美化后的plot代码
    dev.off()  # 关闭绘图设备
    

总结

eulerr包的核心优势在于 **“比例精准” 和 “自定义灵活”** —— 无需手动调整图形位置,即可实现数据与图形的精准匹配;同时通过quantitiesfillsedges等参数,可轻松适配报告、PPT、论文等不同场景的需求。本文提供的代码均经过验证,可直接复制运行,新手只需替换自身数据即可快速上手。

http://www.dtcms.com/a/355493.html

相关文章:

  • 漫谈《数字图像处理》之区域生长和区域分离聚合
  • LeetCode100-41缺失的第一个正数
  • AI实时故障诊断系统(实时采集信号)
  • MySQL 中 tinyint(1)、int(11)、bigint(20) 的数字到底是什么意思?
  • (笔记)输入法框架协作机制深度分析
  • 内网穿透工具【frp】的核心功能底层处理逻辑解析
  • WINTRUST!_ExplodeMessage的作用是赋值psIndirectData
  • Windows 11 中 PowerShell 与 CMD 的深度对比:从定位到实战
  • 集成 A2A Protocol - BeeAI 框架的智能代理通信解决方案
  • 机器人芯片:驱动智能机器的核心技术引擎
  • 有限与无限的游戏 之感
  • 稳石氢能受邀出席2025势银绿氢产业大会,荣获“2025绿氢技术突破奖”!
  • SAP SD模块用户经常遇到的痛点以及解决方案
  • Circuitjs 测试点的使用
  • HTML+CSS、JavaScript、Vue、Ajax
  • Docker 40个自动化管理脚本-2 (40/40)
  • 【动态规划】子数组、子串问题
  • 国产芯力量!贴片式SD卡搭载北京君正Rk瑞芯微,打造嵌入式存储低延迟+高可靠黄金组合​
  • MongoDB 文档模型设计:JSON 结构的灵活性与陷阱
  • Mac训练大模型:MLX-LM框架LoRA训练Qwen3并集成SwanLab进行可视化
  • 基于mac的智能语音处理与应用开发-环境部署
  • 【LangGraph】核心概念速通:State/Node/Edge、通道、事件与流式输出
  • Java8-21的核心特性以及用法
  • FPGA位宽调整模块
  • 跨语言 UDP 聊天程序实现:Go 客户端与 Python 服务端[超简单 入门级聊天程序 包含完整源码]
  • 线段树 (Segment Tree)
  • 理解AI智能体:智能体记忆
  • day04-kubernetes(k8s)
  • 微动开关-电竞鼠标核心!5000万次寿命微动开关评测
  • windows PowerToys之无界鼠标:一套键鼠控制多台设备