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

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.xdnf.cn/news/19025.html

相关文章:

  • 机器学习(讲解)
  • 使用MySQL计算斐波那契数列
  • 开源工具新玩法:cpolar提升Penpot协作流畅度
  • Spark入门:从零到能跑的实战教程
  • 基于Spring Session + Redis + JWT的单点登录实现
  • 在Ubuntu中安装配置MySql Server
  • [p2p-Magnet] docs | HTTP API与Web界面 | 搜索查询引擎
  • PyTorch 张量核心知识点
  • 引入资源即针对于不同的屏幕尺寸,调用不同的css文件
  • KubeBlocks For MySQL 云原生设计分享
  • 三大压测工具对比:Siege/ab/Wrk实战指南
  • SpringBoot系列之实现高效批量写入数据
  • 基础IO详解
  • 【前缀和】
  • Pandas的数据结构
  • 第十七章 Java基础-常用API-System
  • [p2p-Magnet] 数据模型(GORM) | DHT爬虫 | 分类器
  • React Hook+Ts+Antd+SpringBoot实现分片上传(前端)
  • 数据湖与数据仓库
  • Qt 中日志级别
  • ArcGIS+Fragstats:土地利用统计分析、景观格局指数计算与地图制图
  • Android Keystore签名文件详解与安全防护
  • AI视频生成工具全景对比:元宝AI、即梦AI、清影AI和Vidu AI
  • 【贪心 单调栈】P10334 [UESTCPC 2024] 饮料|普及+
  • 工业 5G + AI:智能制造的未来引擎
  • Day16_【机器学习建模流程】
  • 【Rust】 3. 语句与表达式笔记
  • Java HTTP 请求:Unirest 使用指南及与 HttpClient 对比
  • .Net Core Web 架构(Request Pipeline)的底层实现
  • 自己定义的模型如何用hf的from_pretrained