R语言绘制Venn图(文氏图、温氏图、维恩图、范氏图、韦恩图)

Venn图,又称文氏图,标题中其他名字也是它的别称,由封闭圆形组成,代表不同集合。圆形重叠部分表示集合交集,非重叠处为独有元素。在生物学、统计学等领域广泛应用,可展示不同数据集相似性与差异,辅助逻辑分析。以直观方式呈现复杂集合关系,是有力的可视化工具。

0x01 使用VennDiagram包

这里绘制venn图需要用到venn.diagram()函数。

一、函数用法及参数说明

venn.diagram(x, filename, disable.logging = FALSE, height = 3000, width = 3000, resolution = 500, imagetype = "tiff", units = "px", compression = "lzw", na = "stop", main = NULL, sub = NULL, main.pos = c(0.5, 1.05), main.fontface = "plain", main.fontfamily = "serif", main.col = "black", main.cex = 1, main.just = c(0.5, 1), sub.pos = c(0.5, 1.05), sub.fontface = "plain", sub.fontfamily = "serif", sub.col = "black", sub.cex = 1, sub.just = c(0.5, 1), category.names = names(x), force.unique = TRUE, print.mode = "raw", sigdigs = 3, direct.area = FALSE, area.vector = 0, hyper.test = FALSE, total.population = NULL, lower.tail = TRUE,...)

  • 1 基本输入参数
    • x:一个列表,其中每个元素对应韦恩图中的一个集合,可以是向量(如整数、字符等)。
  • 2 输出设置参数
    • 2.1 filename:图像输出的文件名,如果为NULL,则返回一个绘图对象本身。
    • 2.2 disable.logging:布尔值,用于禁用日志文件输出并改为在控制台打印。
    • 2.3 imagetype:图像格式的指定,如 “tiff”、“png” 或 “svg” 等。
  • 3 图形尺寸和分辨率参数
    • 3.1 height:整数,给出输出图形的高度,单位由units参数指定。
    • 3.2 width:整数,给出输出图形的宽度,单位由units参数指定。
    • 3.3 resolution:最终图形的分辨率,以 DPI 为单位。
    • 3.4 units:最终图形的尺寸单位,如 “px”。
  • 4 压缩和缺失值处理参数
    • 4.1 compression:如果图像格式是 TIFF,此参数指定压缩算法,如 “lzw”。
    • 4.2 na:处理缺失值的方法,可选 “none”、“stop”、“remove”。
  • 5 标题和副标题参数
    • 5.1 main:字符,给出韦恩图的主标题。
    • 5.2 sub:字符,给出韦恩图的副标题。
    • 5.3 main.pos:长度为 2 的向量,指示主标题的位置(x,y)。
    • 5.4 main.fontface:字符,给出主标题的字体样式(font style)。
    • 5.5 main.fontfamily:字符,给出主标题的字体类型(font type)。
    • 5.6 main.col:字符,给出主标题的颜色。
    • 5.7 main.cex:数字,给出主标题的字体大小(cex)。
    • 5.8 main.just:长度为 2 的向量,指示主标题的水平和垂直对齐方式。
    • 5.9 sub.pos:长度为 2 的向量,指示副标题的位置(x,y)。
    • 5.10 sub.fontface:字符,给出副标题的字体样式。
    • 5.11 sub.fontfamily:字符,给出副标题的字体类型。
    • 5.12 sub.col:字符,副标题的颜色。
    • 5.13 sub.cex:数字,给出副标题的字体大小。
    • 5.14 sub.just:长度为 2 的向量,指示副标题的水平和垂直对齐方式。
  • 6 类别名称和数据处理参数
    • 6.1 category.names:允许使用绘图语法指定类别名称。
    • 6.2 force.unique:逻辑值,指定是否仅使用输入列表中每个元素的唯一元素,默认为FALSE
    • 6.3 print.mode:可以是 “raw” 或 “percent”,决定数字的打印格式,也可以是一个向量,用于指定多种打印模式。
    • 6.4 sigdigs:如果print.mode中有元素是 “percent”,则此参数指定保留的有效数字位数。
  • 7 面积和超几何检验参数
    • 7.1 direct.area:布尔值,如果为true,则直接将area.vector参数中的值分配给相应区域的面积,仅在清楚向量中每个位置对应哪个区域时使用。
    • 7.2 area.vector:当direct.areatrue时使用,是对应区域的面积向量。
    • 7.3 hyper.test:如果韦恩图只有两个类别且total.population不为NULL,则执行超几何检验并添加到副标题中。
    • 7.4 total.population:当hyper.testtrue时使用,是总群体大小。
    • 7.5 lower.tail:逻辑值,默认为TRUE,如果为TRUE,则概率为P[X <= x],否则为P[X > x]
  • 8 图形调整参数
    • 8.1 lwd:1、2、3、4、5 的数字向量,给出每个圆的周长宽度。
    • 8.2 lty:1、2、3、4、5 的数字向量,给出每个圆的虚线样式。
    • 8.3 col:1、2、3、4、5 的字符向量,给出每个圆的周长颜色。
    • 8.4 fill:1、2、3、4、5 的字符向量,给出每个圆的区域颜色。
    • 8.5 alpha:1、2、3、4、5 的数字向量,给出每个圆的区域透明度。
    • 8.6 label.col:1、2、3、4、5 的字符向量,给出每个区域标签的颜色(长度基于集合数量)。
    • 8.7 cex:1、2、3、4、5 的数字向量,给出每个区域标签的大小(长度基于集合数量)。
    • 8.8 fontface:1、2、3、4、5 的字符向量,给出每个区域标签的字体样式(长度基于集合数量)。
    • 8.9 fontfamily:1、2、3、4、5 的字符向量,给出每个区域标签的字体类型(长度基于集合数量)。
    • 8.10 cat.pos:1、2、3、4、5 的数字向量,给出每个类别名称沿圆的位置(角度),0 在 12 点钟方向。
    • 8.11 cat.dist:1、2、3、4、5 的数字向量,给出每个类别名称距圆边缘的距离(以 npc 单位),可以为负数。
    • 8.12 cat.cex:1、2、3、4、5 的数字向量,给出每个类别名称的大小。
    • 8.13 cat.col:1、2、3、4、5 的字符向量,给出每个类别名称的颜色。
    • 8.14 cat.fontface:1、2、3、4、5 的字符向量,给出每个类别名称的字体样式。
    • 8.15 cat.fontfamily:1、2、3、4、5 的字符向量,给出每个类别名称的字体类型。
    • 8.16 cat.just:基于集合数量长度为 1/2/3/4 的数字向量列表,每个向量长度为 2,指示每个类别名称的水平和垂直对齐方式。
    • 8.17 cat.default.pos:1、2、3 的字符之一,为 “outer” 或 “text”,用于指定类别名称的默认位置(cat.pos 和 cat.dist 的处理方式不同)。
    • 8.18 cat.prompts:2 的数字,布尔值,指示是否显示类别名称定位的帮助文本。
    • 8.19 margin:1、2、3、4、5 的数字,给出图形周围的空白量(以网格单位)。
    • 8.20 rotation.degree:1、2、3、4、5 的数字,给出整个图形的旋转度数。
    • 8.21 rotation.centre:1、2、3、4、5 的长度为 2 的数字向量,指示旋转中心(x,y)。
    • 8.22 rotation:3 的数字,给出三集合韦恩图的顺时针旋转(1、2 或 3)。
    • 8.23 reverse:3 的逻辑值,沿三集合韦恩图的中央垂直轴对称反射。与rotation结合使用以生成所有可能的集合顺序。
    • 8.24 euler.d:2、3 的逻辑值,为二集合和三集合韦恩图启用欧拉图(具有可移动圆圈的韦恩图)。
    • 8.25 scaled:2、3 的逻辑值,为二集合和某些三集合欧拉图启用缩放。(必须为true才能启用此功能)。
    • 8.26 sep.dist:2、3 的数字,控制某些二集合或三集合欧拉图中不同圆圈之间的分离距离。
    • 8.27 offset:2、3 的数字,介于 0 和 1 之间,给出在包含类型的二集合欧拉图和某些类似的三集合欧拉图中较小圆圈的偏移量。
    • 8.28 inverted:2 的逻辑值,沿其二集合韦恩图的垂直轴翻转(与reverse不同)。
    • 8.29 ext.text:2 的逻辑值,当区域较小时允许外部文本标签。
    • 8.30 ext.percent:2 的数字向量(长度为 3),指示部分区域必须小于的比例以触发外部文本放置。元素允许对第一区域、第二区域和交叉区域进行单独控制。
    • 8.31 ext.pos:2 的数字向量(长度为 1 或 2),给出沿圆的外部区域标签的位置(角度),0(默认)在 12 点钟方向。
    • 8.32 ext.line.lwd:2 的数字,连接到外部文本的线的宽度。
    • 8.33 ext.line.lty:2 的数字,连接外部区域标签到其锚点的线的虚线样式。
    • 8.34 ext.dist:2 的数字向量(长度为 1 或 2),指示外部线的长度(使用负值缩短线)。
    • 8.35 ext.length:2 的数字向量(长度为 1 或 2),指示从锚点到文本绘制的外部线的比例。

二、准备工作

# 安装 VennDiagram 包,如果已经安装过可以省略这一步
install.packages("VennDiagram")

# 加载 VennDiagram 包以使用其函数
library(VennDiagram)

三、绘制并直接输出本地

#设置工作目录
setwd("d:/")

# 创建一个包含两个集合的列表,集合 A 为 1 到 150 的整数,集合 B 为 121 到 170 的整数
l <- list(A = 1:150,B = 121:170)

# 使用 venn.diagram 函数绘制两个集合的韦恩图,并将结果保存为名为 "VennDiagram-1.png" 的图片文件
venn.diagram(l,filename = "VennDiagram-1.png")

四、绘制简单的韦恩图(不保存)

# 创建一个包含四个集合的列表,集合 A 为 1 到 150 的整数,集合 B 为 121 到 170 的整数,集合 C 为 75 到 234 的整数,集合 D 为 23 到 190 的整数
ll <- list(A = 1:150,B = 121:170,c = 75:234,D = 23:190)

# 使用 venn.diagram 函数绘制四个集合的韦恩图,filename 设置为 NULL 表示不保存为文件,而是将结果存储在一个对象中
venn2 <- venn.diagram(ll,filename = NULL)

# 使用 grid.draw 函数在当前图形设备上绘制存储在 venn2 对象中的韦恩图
grid.draw(venn2)

五、调整和美化

# 创建一个包含四个集合的列表,集合 A 为 1 到 150 的整数,集合 B 为 121 到 170 的整数,集合 C 为 75 到 234 的整数,集合 D 为 23 到 190 的整数
lll <- list(A = 1:150,B = 121:170,c = 75:234,D = 23:190)

# 定义填充颜色向量,分别对应四个集合的填充颜色
fill_colors <- c("cornflowerblue","green","yellow","darkorchid1")

# 定义类别颜色向量,用于设置四个集合的类别名称颜色
cat_col <- c("darkblue","darkgreen","orange","darkorchid4")

# 使用 venn.diagram 函数绘制四个集合的韦恩图,filename 设置为 NULL 表示不保存为文件,而是将结果存储在一个对象中
# 参数说明:
#   lll:包含四个集合的列表,用于绘制韦恩图
#   filename = NULL:不保存为文件,而是返回一个绘图对象
#   col = "black":韦恩图的边框颜色为黑色
#   fill = fill_colors:使用定义的填充颜色向量为四个集合的区域填充颜色
#   alpha = 0.4:设置区域的透明度为 0.4
#   cat.col = cat_col:使用定义的类别颜色向量设置四个集合的类别名称颜色
#   cat.cex = 1.5:设置类别名称的字体大小为 1.5
#   rotation.degree = 0:不进行旋转
#   lwd = 3:设置边框宽度为 3
#   lty = 4:设置边框的线型为 4
venn3 <- venn.diagram(lll,
                      filename = NULL,
                      col = "black",
                      fill = fill_colors,
                      alpha = 0.4,
                      cat.col = cat_col,
                      cat.cex = 1.5,
                      rotation.degree = 0,
                      lwd = 3,lty = 4)

# 使用 grid.draw 函数在当前图形设备上绘制存储在 venn3 对象中的韦恩图
grid.draw(venn3)

0x02 使用venneuler包

一、错误解决

我在安装包时,出现了如下错误信息(如未遇到该情况可忽略该解决方式):

> library(venneuler)
载入需要的程序包:rJava
Error: package or namespace load failed for ‘rJava’:
 loadNamespace()里算'rJava'时.onLoad失败了,详细内容:
  调用: fun(libname, pkgname)
  错误: JAVA_HOME cannot be determined from the Registry
错误: 无法载入程序包‘rJava’

这个错误通常是由于无法正确找到 Java 安装路径导致的。
首先确保你的系统上安装了 Java。你可以在命令行中输入 java -version 来检查 Java 是否安装以及查看其版本信息。
如果出现如图的提示,则表示系统里面没有安装Java,则需要通过下载安装Java,错误即可得到解决。
错误解决
Java官网地址:https://www.java.com/zh-CN/

二、函数用法及参数说明

venneuler(combinations, weights,...)

  • 1 combinations:可以是以下几种形式之一:

    • 字符向量:指定不相交的类组合,类名之间用 “&” 字符分隔,例如c("A","B","A&B")
    • 命名的数值向量:名称指定类组合,值指定权重,例如c(A=1, B=2, "A&B"=0.5)
    • 两列的字符矩阵:指定元素到集合的映射,第一列是元素,第二列是集合名称,此时weights参数被忽略。
    • 逻辑矩阵或数值矩阵:矩阵的列代表集合,行中的非零值(对于逻辑矩阵)或真值(对于数值矩阵)表示共同出现,行的权重对于逻辑矩阵为 1,对于数值矩阵为行和。为了方便,也可以传递数据框,它将被强制转换为矩阵。
  • 2 weights:如果combinations是字符向量,那么这个参数指定相关的权重。在其他情况下被忽略。

  • 返回值
    返回一个VennDiagram类的对象,包含以下组件:

    • 1 centers:圆的中心(列是 x 和 y 坐标)。
    • 2 diameters:圆的直径。
    • 3 colors:圆的颜色,取值在 0 到 1 之间。
    • 4 labels:圆的标签。
    • 5 residuals:残差(输入交集区域与拟合交集区域之间的百分比差异)。
    • 6 stress:解的应力值。
    • 7 stress01:基于随机数据的应力的 0.01 临界值。
    • 8 stress05:基于随机数据的应力的 0.05 临界值。

三、准备工作

# 安装 venneuler 包
install.packages("venneuler")

# 加载 venneuler 包以使用其函数
library(venneuler)

#加载rJava包以使用其函数
library(rJava)

四、绘制韦恩图

已知集合的具体元素分布情况通过矩阵形式明确地表示元素与集合的关系可以这样表达:

# 创建一个数据框并转换为矩阵
m <- as.matrix(data.frame(A = c(1.5,0.2,0.4,0,0),
                          B = c(0,0.2,0,1,0),
                          C = c(0,0,0.3,0,1)))

# 使用 venneuler 函数根据矩阵 m 计算韦恩图或欧拉图,并将结果存储在 v 中
v <- venneuler(m)

# 使用 plot 函数绘制由 venneuler 函数生成的韦恩图对象 v
plot(v)

而已知集合及其交集的权重情况,而不需要具体的元素分布信息可以这样表达:

# 创建一个韦恩图对象 vd,通过 venneuler 函数传入命名的数值向量
# 该向量指定了不同集合组合及其对应的权重
# 集合 A 的权重为 0.3,集合 B 的权重为 0.5,集合 C 的权重为 0.7
# 集合 A 和 B 的交集权重为 0.1,集合 B 和 C 的交集权重为 0.2,集合 A、B 和 C 的交集权重为 0.1
vd <- venneuler(c(A = 0.3, B = 0.5, C = 0.7, "A&B" = 0.1, "B&C" = 0.2, "A&B&C" = 0.1))

# 使用 plot 函数绘制由 venneuler 函数生成的韦恩图对象 vd
plot(vd)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/895787.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据新视界 --大数据大厂之大数据在智慧城市建设中的应用:打造智能生活的基石

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【MR开发】在Pico设备上接入MRTK3(一)——在Unity工程中导入MRTK3依赖

写在前面的话 在Pico上接入MRTK3&#xff0c;目前已有大佬开源。 https://github.com/Phantomxm2021/PicoMRTK3 也有值得推荐的文章。 MRTK3在PICO4上的使用小结 但由于在MacOS上使用MRTK3&#xff0c;无法通过Mixed Reality Feature Tool工具管理MRTK3安装包。 故记录一下…

集合collection和泛型

collection可以直接打印内容&#xff0c;而不是地址&#xff0c;内部已经重写了。 List家族&#xff1a; package com.itheima.d6_collection_update_delete;import java.util.ArrayList; import java.util.Iterator; import java.util.List;/**目标&#xff1a;研究集合遍历并…

Fooocus模型部署指南

一、介绍 Fooocus是一款开源的AI绘画工具&#xff0c;由斯坦福大学博士生张吕敏&#xff08;Github上用户名lllyasviel&#xff09;开发。是一款结合StableDiffusion和Midjourney理念的图像生成工具&#xff0c;提供离线、开源且易于使用的界面。它简化安装步骤&#xff0c;用…

【软件测试】JUnit

Junit 是一个用于 Java 编程语言的单元测试框架&#xff0c;Selenium是自动化测试框架&#xff0c;专门用于Web测试 本篇博客介绍 Junit5 文章目录 Junit 使用语法注解参数执行顺序断言测试套件 Junit 使用 本篇博客使用 Idea集成开发环境 首先&#xff0c;创建新项目&#…

【深度学习】评价指标

https://zhuanlan.zhihu.com/p/479060683 https://blog.csdn.net/fyfugoyfa/article/details/136414958 Confusion Matrix&#xff0c;是一个用来衡量模型好坏的统计量&#xff0c;其中Accuracy&#xff0c;Precision&#xff0c;F1 score&#xff0c;Recall&#xff0c;ROC曲线…

[SAP ABAP] SE11定义数据类型(结构与表类型)

1.定义结构 使用事务码SE11创建数据类型(结构)&#xff0c;输入自定义的数据类型名称&#xff0c;点击创建按钮 勾选结构并点击确定按钮 填写简短描述&#xff0c;并在"组件"页签上添加相关字段信息&#xff0c;点击激活按钮即可生效该结构ZSPO_HEADER_437 2.定义表…

企业网站设计之网站结构设计

创意主题网站的结构设计更是需要更为精心的策划和执行&#xff0c;以确保吸引并保持用户的注意力。以下是创意主题网站结构设计的关键要素&#xff1a; 1. 目标明确的导航栏 导航栏是用户进入网站并浏览内容的入口。在创意主题网站中&#xff0c;导航栏的设计要突显网站的主…

【大数据算法】一文掌握大数据算法之:大数据算法分析技术。

大数据算法分析技术 1、引言2、 大数据分析技术2.1 时间/空间复杂度2.2 I/O 复杂度2.3 结果质量2.4 通信复杂度 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;最近更文有些不频繁了哈。 小鱼&#xff1a;这一个月不见&#xff0c;你这说话方式也变了。 小屌丝&#xff…

Electron-(一)创建桌面应用

一、概述 本文通过核心步骤介绍&#xff0c;形成使用Electron进行桌面应用创建的概述性内容。 在当今的软件开发领域&#xff0c;Electron 作为一款强大的工具&#xff0c;为开发者提供了一种便捷的方式来创建跨平台的桌面应用。本文将通过详细介绍核心步骤&#xff0c;带您领…

PPT自动化:掌握 python-pptx 的基础元素

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 PPT 📒📝 什么是 Slide?📝 了解 Shape📝 深入 Paragraph📝 探索 Run⚓️ 相关链接 ⚓️📖 介绍 📖 初学python-pptx,掌握 python-pptx 与 PPT 元素的对应关系是至关重要的一步。今天,我们一起来了解一下 PPT 中…

Python基于OpenCV的实时疲劳检测

2.检测方法 1&#xff09;方法 与用于计算眨眼的传统图像处理方法不同&#xff0c;该方法通常涉及以下几种组合&#xff1a; 1、眼睛定位。 2、阈值找到眼睛的白色。 3、确定眼睛的“白色”区域是否消失了一段时间&#xff08;表示眨眼&#xff09;。 相反&#xff0c;眼睛长…

【Redis】数据结构(中)----ZipList(压缩列表)

文章目录 ZipList(压缩列表)概念ZipList的结构Entry的内部结构previous_entry_lengthEncoding存储字符串存储整数 content ZipList会存在的问题查询中间数据连锁更新 总结 ZipList(压缩列表) 概念 ZipList是一种特殊的"双端链表",由一系列特殊编码的连续内存块组成…

解决Git拉取项目后右侧边栏无Maven的问题

从gitlab上拉取新项目&#xff0c;当你配置好maven仓库地址&#xff0c;配置文件&#xff0c;各种库都配置好了&#xff0c;但是没有Maven&#xff0c;找不到下图的package因此打包不了项目解决办法 非常简单&#xff0c;只需一步&#xff01; 右击项目里面的pom.xml,再点击add…

uniapp小程序自定义聚合点

注&#xff1a; 1.默认的聚合点可以点击自动展示子级点位&#xff0c;但是自定义的聚合点在ios上无法触发markerClusterClick的监听&#xff0c;至今未解决&#xff0c;不知啥原因 2.ios和安卓展示的点位样式还有有差别 源码附上 <template><view class"marke…

算法——python实现归并排序

文章目录 归并排序NB三人组总结 归并排序 """ 归并排序 """""" 时间复杂度 &#xff1a; O(N*logN) 空间复杂度 &#xff1a; O(N) 需要额外生成一个临时变量&#xff0c;最大是N长 思路&#xf…

[Linux网络编程]03-TCP协议

一.TCP协议数据通信的过程 TCP数据报如下&#xff0c;数据报中的标志位双端通信的关键。 三次握手: 1.客户端向服务端发送SYN标志位&#xff0c;请求建立连接&#xff0c;同时发送空包 2.服务端向客户端回发ACK标志位(即确认标志位&#xff0c;任何一端发送数据后都需要另一端…

Nginx UI 一个可以管理Nginx的图形化界面工具

Nginx UI 是一个基于 Web 的图形界面管理工具&#xff0c;支持对 Nginx 的各项配置和状态进行直观的操作和监控。 Nginx UI 的功能非常丰富&#xff1a; 在线查看服务器 CPU、内存、系统负载、磁盘使用率等指标 在线 ChatGPT 助理 一键申请和自动续签 Let’s encrypt 证书 在…

[JAVAEE] 线程安全问题

目录 一. 什么是线程安全 二. 线程安全问题产生的原因 三. 线程安全问题的解决 3.1 解决修改操作不是原子性的问题 > 加锁 a. 什么是锁 b. 没有加锁时 c. 加锁时 d. 死锁 e. 避免死锁 3.2 解决内存可见性的问题 > volatile关键字 (易变的, 善变的) a. 不加…

C++ string的精讲

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 前言 string是标准库中的一个类&#xff0c;它位于<string>头文件中。这个类提供…