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

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并修改我的源码,欢迎大家提出建议与意见。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何理解String的不可变性
  • React中的无状态组件:简约之美
  • React的usestate设置了值后马上打印获取不到最新值
  • 学习日志:volatile 关键字
  • Java | 自制AWT单词猜一猜小游戏(测试版)
  • 通过vue3 + TypeScript + uniapp + uni-ui 实现下拉刷新和加载更多的功能
  • 宝塔Wordpress 插件 Redis object cache 导致内存很高 80%以上的原因和解决
  • 基于最新版的flutter pointycastle: ^3.9.1的AES加密
  • 一、C#概述
  • cordova使用vue进行开发
  • 题解:T480718 eating
  • 【思科】链路聚合实验配置和背景
  • 自动化产线 搭配数据采集监控平台 创新与突破
  • mysql 安装配置 next 按钮为什么置灰点击不了
  • 3D 渲染一个房屋需要多长时间?
  • co.js - 让异步代码同步化
  • css布局,左右固定中间自适应实现
  • go append函数以及写入
  • JavaScript 基本功--面试宝典
  • Redis学习笔记 - pipline(流水线、管道)
  • vue-cli在webpack的配置文件探究
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 对象管理器(defineProperty)学习笔记
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 如何实现 font-size 的响应式
  • 详解移动APP与web APP的区别
  • 一个SAP顾问在美国的这些年
  • 用Visual Studio开发以太坊智能合约
  • C# - 为值类型重定义相等性
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 阿里云ACE认证学习知识点梳理
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​香农与信息论三大定律
  • # .NET Framework中使用命名管道进行进程间通信
  • (2015)JS ES6 必知的十个 特性
  • (C语言)球球大作战
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (十三)Flink SQL
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .“空心村”成因分析及解决对策122344
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 回调、接口回调、 委托
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net 无限分类