R绘制Venn图及其变换

我自己在用R做各种分析时有不少需要反复用到的基础功能,比如一些简单的统计呀,画一些简单的图等等,虽说具体实现的代码也不麻烦,但还是不太想每次用的时候去找之前的代码。

索性将常用的各种函数整成了一个包:pcutils,
网址:https://github.com/Asa12138/pcutils

从CRAN安装:

install.packages("pcutils")

但目前还是建议从github安装,包含的功能会多一些:

install.packages("devtools")
devtools::install_github('Asa12138/pcutils',dependencies=T)

Introduction

Venn图是一种比较常用的可视化方法,它可以用来展示多个集合的交集、并集、差集等信息。

Venn图的基本思想是,将多个集合分成不同的区域,并用不同的颜色填充这些区域,从而展示出不同集合之间的关系。Venn图的变种有很多,比如花瓣图、Upset图、Venn网络图等,但它们想要展示的信息都是类似的。

做这一类Venn图的在线网站有很多,我最推荐的是EVenn:http://www.ehbio.com/test/venn/#/,使用方便,种类多样:

但有时候我们还是想自己用R来绘制Venn图,下面介绍一下pcutils 包中的venn函数。

venn

vennpcutils 包中提供的绘制Venn图的函数,它可以绘制多种类型的Venn图。

输入数据也十分统一,可以是一个list如list(a = 1:3, b = 3:7, c = 2:4),也可以是一个dataframe,其中每一列代表一个集合,每一行代表一个feature,如果值为0说明该集合不含该feature,大于0说明含有该feature。

标准Venn图

标准Venn图通常用于比较两到六组实验数据,使用颜色编码元素来表示unique和common的组件。

绘制标准Venn图的R包非常多,比如ggvenn,ggVennDiagram,Vennerable等,我这里内置的是ggVennDiagram的函数来绘制,可以使用ggplot的逻辑来方便修改:

aa <- list(a = 1:3, b = 3:7, c = 2:4, d=7:8)
p1=venn(aa[1:3], mode = "venn")
p2=venn(aa, mode = "venn")+viridis::scale_fill_viridis()
p1+p2

Euler图

Euler图在可行的情况下会省略空的交叉区域,从而提高了多个集合的可视化的精度和具体性。Euler图专门为两组和三组实验数据而设计,可生成面积比例表示,其中交叉区域的大小与共享元素的数量相关。此功能可以清晰地描述集合之间的部分包含、完全包含和完全排除关系。

我这里内置的是eulerr包的函数来绘制:

venn(aa, mode = "euler")

Upset图

UpSet 图是一种创新的可视化技术,专为集合交集的定量分析而设计,可容纳 3 到 几十组的复杂数据集。

通过两种呈现模式,它可以熟练地可视化非空交叉点和空交叉点。该图由三个关键部分组成:水平条形图描绘每个集合中的总元素,垂直条形图指示相应交叉点中的元素,以及带有连接点的矩阵,描绘集合之间的所有交叉点类型。

我这里内置的是UpSetR包的函数:

venn(aa, mode = "upset")

花瓣图

当处理超过10组的综合数据集时,维恩图、欧拉图、UpSet图等传统可视化方法会遇到局限性。花瓣图是平衡可解释性和信息丰富性的方法,只展示所有集合共有的部分和每个集合特有的部分,省略了两两之间的关系,因为实在太多了。

我这里使用plotrix包手动来绘制中心的圆和周围的椭圆花瓣:

data(otutab)
venn(otutab, mode = "flower")

Venn网络图

维恩网络超越了标准维恩图的常规边界,超越了相交和共有的描述。它通过将每个集合指定为父节点并通过边缘将单个元素连接到其各自的父节点,从而巧妙地说明了集合中的关系。

这里基于我的另一个包MetaNet来绘制网络,不同的数据类型会影响所得的网络结构:

filter_df=otutab[sample(300:500,50),1:3]
venn(filter_df, mode = "network")

所有的可视化方法都是为展示数据服务的,
我整合这些函数也是希望可以更关注数据本身,花更少的精力在调节图形上,先快速对我们的数据有整体的把握。

pcutils的初衷还是迎合我自己的编程与数据分析习惯的,所以可能并不适合所有人,大家也可以直接fork并修改我的源码,欢迎大家提出建议与意见。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手撸俄罗斯方块——工程介绍

概述 接下来我们将从工程角度分析本项目。本项目采用大仓模式&#xff0c;利用 yarn lerna 对项目进行管理&#xff0c;项目结构如下&#xff1a; . ├── packages │ ├── core 俄罗斯方块的核心逻辑 │ ├── console 俄罗斯方块的控制台版本的实现 │ ├── …

【SpringBoot】单元测试之测试Service方法

测试Service方法 SpringBootTest public class UserServiceTest{ Autowired private UserService userService; Test public void findOne () throws Exception{ Assert.assertEquals("1002",userService.findOne()); } } 测试Controller接口方法 Runwith(S…

TCP Socket编程示例

介绍 本文主要学习TCP socket编程的代码。socket常用于客户端发起连接&#xff0c;服务端一般都会用一些高性能网络框架&#xff0c;不会让你手写socket服务端的。客户端代码基本都差不多。 服务端 server.cpp: #include <iostream> #include <unistd.h> #incl…

[CP_AUTOSAR]_分层软件架构_接口之通信模块交互介绍

目录 1、协议数据单元(PDU)传输2、通信模块的案例2.1、SDU、 PCI & PDU2.2、通信模块构成2.3、从数据传输的角度看Communication2.4、Communication中的接口 在前面 《关于接口的一些说明》 以及  《Memory软件模块接口说明》 中&#xff0c;简要介绍了CP_AUTOSAR分层…

ByteBuf释放注意的问题

Bytebuf需要释放&#xff0c;否则可能导致OOM。 如果bytebbuf传递到了head或tail&#xff0c;不需要我们关心。 在head和tail里&#xff08;head实现了outhandler、inhander。tail实现了inhander&#xff09;&#xff0c;底层自动调用了bytebuf.release。 其他情况需要我们手动…

MySQL(终章)视图, 用户管理, C连接MySQL.

目录 1.视图; 2.用户管理; 1.视图: 1.1 概念和基本操作: 视图本质就是表结构, 虚拟表. 视图和基表数据的改变都会相互影响. 创建视图语法: create view 视图名 as select语句&#xff1b; 修改视图: update set ; 删除视图: drop view 视图名&#xff1b; 1. 2 视图使用规则: …

集成学习的艺术:使用Scikit-Learn实现模型融合

集成学习的艺术&#xff1a;使用Scikit-Learn实现模型融合 在机器学习领域&#xff0c;集成学习是一种强大的技术&#xff0c;它通过结合多个模型的预测来提高整体性能。Scikit-Learn&#xff08;简称sklearn&#xff09;&#xff0c;作为Python中最受欢迎的机器学习库之一&am…

IP地址:由电脑还是网线决定?

IP地址&#xff1a;由电脑还是网线决定&#xff1f; 在互联网时代&#xff0c;IP地址是我们进行网络通信的基础。然而&#xff0c;对于IP地址究竟是由电脑决定还是由网线决定的问题&#xff0c;不少人可能存在疑惑。本文将从IP地址的定义、分配方式以及影响因素等方面进行探讨…

减分兔搜题-12123学法减分20题目及答案 #媒体#职场发展

对于即将参加驾驶考试的朋友来说&#xff0c;掌握一些经典题目和答案至关重要。今天&#xff0c;我就为大家带来了这样一份干货——20道驾驶考试题目和答案&#xff0c;助你轻松应对考试&#xff01;这些题目不仅包括了考试中常考的内容&#xff0c;还有针对难点和重点的详细解…

时序数据库-02-聊一聊时序数据库

时序数据库系列 时序数据库-01-时序数据库有哪些&#xff1f;为什么要使用 时序数据库-02-聊一聊时序数据库 时序数据库-03-pentsdb-分布式时序数据库 时序数据库-04-InfluxData-分布式时序数据库 时序数据库-05-TDengine 是一款开源、高性能、云原生的时序数据库 (Time-S…

ETL数据同步之DataX,附赠一套DataX通用模板

今天跟大家分享数据同步datax的模板&#xff0c;小伙伴们简单直接借鉴使用。 还记得上一篇关于大数据DS调度工具的分享嘛&#xff1f; 主流大数据调度工具DolphinScheduler之数据ETL流程-CSDN博客 里面的核心就是采用了DATAX的数据同步原理。 一&#xff0c;什么是DataX D…

基于luckysheet实现在线电子表格和Excel在线预览

概述 本文基于luckysheet实现在线的电子表格&#xff0c;并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …

华为云.VPC关联概念与对等连接实践

云计算.华为云 VPC关联概念与对等连接实践 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/q…

AWS全服务历史年表:发布日期、GA和服务概述一览(一)

我一直在尝试从各种角度撰写关于Amazon Web Services&#xff08;AWS&#xff09;的信息和魅力。由于我喜欢技术历史&#xff0c;这次我总结了AWS服务发布的历史年表。 虽然AWS官方也通过“Whats New”发布了官方公告&#xff0c;但我一直希望能有一篇文章将公告日期、GA日期&…

Java流的奥秘:字节与字符的交响乐章

在Java编程的广阔天地中&#xff0c;数据的流动如同一条条看不见的河流&#xff0c;滋养着程序的生命力。而流(Stream)作为数据传输的核心机制&#xff0c;承载着数据的读写重任。今天&#xff0c;我们将深入探讨字节流与字符流的精妙之处&#xff0c;解锁它们背后的编程艺术。…

视频监控平台LntonCVS视频融合共享平台智慧安防视频监控汇聚应用方案

LntonCVS是一款功能强大且灵活部署的安防视频监控平台。它支持多种主流标准协议&#xff0c;包括GB28181、RTSP/Onvif、RTMP等&#xff0c;同时能够兼容海康Ehome、海大宇等厂家的私有协议和SDK接入。该平台不仅提供传统的安防监控功能&#xff0c;还支持接入AI智能分析&#x…

无人机之产业链篇

无人机产业链上游为无人机设计研发及关键原材料的生产&#xff0c;其中关键原材料有金属材料和复合材料两大类&#xff0c;包括钛合金、铝合金、陶瓷基等特殊材料 中游无人机整机制造包括飞行系统、地面系统、任务载荷系统三个方面&#xff0c;是无人机制造的核心部分&#xf…

Adobe国际认证详解-网页设计认证专家行业应用场景解析

在当今数字化时代&#xff0c;网页设计已成为各行各业不可或缺的一环。而网页设计认证专家&#xff0c;作为经过Adobe国际认证体系严格考核的专业人才&#xff0c;正逐渐成为行业内炙手可热的存在。他们凭借深厚的网页设计理论基础和实践经验&#xff0c;为各行各业提供了高质量…

144. 字典序最小的 01 字符串(卡码网周赛第二十六期(23年阿里淘天笔试真题))

题目链接 144. 字典序最小的 01 字符串&#xff08;卡码网周赛第二十六期&#xff08;23年阿里淘天笔试真题&#xff09;&#xff09; 题目描述 小红有一个 01 字符串&#xff0c;她可以进行最多 k 次提作&#xff0c;每次操作可以交换相邻的两个字符&#xff0c;问可以得到的…

java设计模式:03-06-享元模式

享元模式&#xff08;Flyweight Pattern&#xff09; 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过共享技术来有效地支持大量细粒度对象的重用。享元模式避免了在相似对象间的高开销&#xff0c;通过共享尽可能多的状态来尽量减…