使用ggplot2语法画韦恩图:ggvenndiagram
获取更多R语言知识,请关注公众号:医学和生信笔记
医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。
文章目录
- 安装
- 使用
- 提取数据,用ggplot2画
前几天介绍了使用venndiagram
包绘制韦恩图,这个包很简单,参数也不复杂,基本能满足日常需求,但是每次运行都要产生一个日志文件在本地,很是难受,最多支持5个集合。
现在在R里面画图,如果不能支持图层语法,感觉都拿不出手了,一切都在ggplot2
化。
韦恩图当然也不例外,比如这个国产R包:ggvenndiagram
。
这个包比较牛逼的地方在于,它可以通过封装好的函数直接画图,也可以把画图数据提取出来,让你用ggplot2
自己画,支持2-7个集合,应该够你用了吧?
俗话说:数就是图,图就是数,相比较于画图来说,我还是觉得整理数据比较难!
安装
任选一种:
install.packages("ggVennDiagram")# install.packages("devtools")
devtools::install_github("gaospecial/ggVennDiagram")
这个包发了文章的,大家使用的话记得引用!
Gao, C.-H., Yu, G., and Cai, P. (2021). ggVennDiagram: An Intuitive, Easy-to-Use, and Highly Customizable R Package to Generate Venn Diagram. Frontiers in Genetics 12, 1598. doi: 10.3389/fgene.2021.706907.
使用
library(ggVennDiagram)
library(ggplot2)
sets <- list(a = sample(1:500,300),b = sample(1:500,350),c = sample(1:500,420),d = sample(1:500,300)
)ggVennDiagram(sets,category.names = c("set 1","set 2","set 3","set 4"), # 集合名字set_color = c("blue","red","yellow","black"), # 集合名字颜色set_size = 6,# 集合名字大小label = "both", # "count","percent","both","none"label_geom = "label", # label/text,label_alpha = 0, # label背景色label_color = "firebrick",label_percent_digit = 2, # 保留几位小数edge_lty = "dashed", # 边框线型,solidedge_size = 1.2 # 边框粗细)+scale_fill_gradient(low = "grey90",high = "grey60")+ # 填充色scale_color_manual(values = c("grey10","grey10","grey10","grey10")) # 边框色,貌似不能变为无边框
上面这个例子是直接出图版,简单快捷,不过默认颜色不是很好看,需要自己鼓捣一番才能找到合适的颜色。
下面是比较有意思的部分,提取数据,让你用ggplot2
自己画!
提取数据,用ggplot2画
作者把韦恩图的主要结构拆解为3个部分:集合标签/集合边框/交集区域,把这3个部分分装在一个S4对象里,方便你自由调取使用,自由改变。
venn <- Venn(sets)
df <- process_data(venn)
df
## An object of class "VennPlotData"
## Slot "setEdge":
## Simple feature collection with 4 features and 5 fields
## Geometry type: LINESTRING
## Dimension: XY
## Bounding box: xmin: 0.0649949 ymin: 0.1849949 xmax: 0.9350051 ymax: 0.8391534
## CRS: NA
## # A tibble: 4 x 6
## id geometry component item count name
## <chr> <LINESTRING> <chr> <named> <int> <chr>
## 1 1 (0.1025126 0.7174874, 0.09412107 0.708119~ setEdge <int [~ 300 a
## 2 2 (0.2525126 0.8174874, 0.246341 0.8103391,~ setEdge <int [~ 350 b
## 3 3 (0.7333452 0.8033452, 0.7262248 0.8095447~ setEdge <int [~ 420 c
## 4 4 (0.8974874 0.7174874, 0.8881191 0.7258789~ setEdge <int [~ 300 d
##
## Slot "setLabel":
## Simple feature collection with 4 features and 3 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 0.08 ymin: 0.78 xmax: 0.93 ymax: 0.86
## CRS: NA
## # A tibble: 4 x 4
## id geometry component name
## <chr> <POINT> <chr> <chr>
## 1 1 (0.08 0.78) setLabel a
## 2 2 (0.26 0.86) setLabel b
## 3 3 (0.71 0.85) setLabel c
## 4 4 (0.93 0.78) setLabel d
##
## Slot "region":
## Simple feature collection with 15 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 0.0649949 ymin: 0.1849949 xmax: 0.9350051 ymax: 0.8391534
## CRS: NA
## # A tibble: 15 x 6
## id geometry component item count name
## <chr> <POLYGON> <chr> <list> <int> <chr>
## 1 1 ((0.1025126 0.7174874, 0.1118809 0.7258~ region <int [~ 7 a
## 2 2 ((0.2525126 0.8174874, 0.2596609 0.8236~ region <int [~ 9 b
## 3 3 ((0.7333452 0.8033452, 0.7395447 0.7962~ region <int [~ 26 c
## 4 4 ((0.8974874 0.7174874, 0.9058789 0.7081~ region <int [~ 6 d
## 5 12 ((0.2494531 0.7508377, 0.266399 0.74722~ region <int [~ 18 a..b
## 6 13 ((0.3598131 0.3161471, 0.3466157 0.3144~ region <int [~ 23 a..c
## 7 14 ((0.6341476 0.306281, 0.6321686 0.29195~ region <int [~ 6 a..d
## 8 23 ((0.4087951 0.6905086, 0.4240163 0.7044~ region <int [~ 47 b..c
## 9 24 ((0.7013464 0.5605964, 0.7121743 0.5437~ region <int [~ 7 b..d
## 10 34 ((0.7562978 0.7359764, 0.7555797 0.7233~ region <int [~ 28 c..d
## 11 123 ((0.4254307 0.668526, 0.4425419 0.65529~ region <int [~ 67 a..b.~
## 12 124 ((0.6020164 0.4567956, 0.6098817 0.4389~ region <int [~ 24 a..b.~
## 13 134 ((0.4966178 0.374675, 0.4805314 0.36463~ region <int [~ 51 a..c.~
## 14 234 ((0.5085786 0.6114214, 0.5243976 0.6266~ region <int [~ 74 b..c.~
## 15 1234 ((0.5066822 0.5956024, 0.5213246 0.5792~ region <int [~ 104 a..b.~
通过上面两个函数,就把韦恩图的结构变成了数据框形式,方便使用ggplot2
画图,比较牛逼的是geometry
这列,存储的是各个集合的坐标!
接下来就可以使用ggplot2
了。
ggplot()+geom_sf(data = venn_region(df), aes(fill=count))+geom_sf(data = venn_setedge(df),size=2,lty="dashed",color="grey")+geom_sf(data = venn_setlabel(df),aes(label=name))+geom_sf_label(data = venn_region(df),aes(label=id),fontface="bold")+scale_fill_distiller(palette = 5)+theme_void()
是不是很神奇,不过还是封装好的画图函数的更好用的一点。
而且,不太容易找到好看的颜色搭配。
获取更多R语言知识,请关注公众号:医学和生信笔记
医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。
使用ggplot2语法画韦恩图:ggvenndiagram相关推荐
- VennDiagram包画韦恩图
获取更多R语言知识,请关注公众号:医学和生信笔记 医学和生信笔记.专注R语言在临床医学中的使用,R语言数据分析和可视化.主要分享R语言做医学统计学.meta分析.网络药理学.临床预测模型.机器学习.生 ...
- python画画用哪个软件_如何用python画韦恩图? 使用python的tutul工具,画一朵雏菊花...
使用python的tutul工具,画一朵雏菊花 如何用python画韦恩图?不管什么时候,给心留一点空间.人生一世,不用什么都要去争,不是什么都要去抢,欲望少一点,满足多一点,这样才会活得潇洒一点,人 ...
- 推荐几款画韦恩图的在线工具
(1)http://bioinformatics.psb.ugent.be/webtools/Venn/ 操作简单,不仅画出了韦恩图,还很贴心的给出了数据统计的结果并列出了各个部分对应的ID,且提供直 ...
- python 画韦恩图(venn)代码(两组和三组数据),简单易学易上手
韦恩图除了用R可以画之外,用python也可以画,通过对两个阶段的对应的geneid进行韦恩图展示,即可以知道两个阶段重叠的内容有多少,并通过写代码,取出两个阶段重叠部分的数据. import mat ...
- 在线作图|如何画韦恩图(包含upset图)
韦恩图(包含upset图) 韦恩图(Venn diagram)用于展示在不同的事物群组(集合)之间的联系.R 语言中的维恩图绘制有很多包,Vennerable(最多9维),VennDigram(最多5 ...
- matlab画韦恩图,用R语言绘制韦恩图
R中提供了多个可用于绘制韦恩图的软件包,本文主要是介绍的是VennDiagram包. 安装VennDiagram包:install.packages("VennDiagram") ...
- R语言如何绘制韦恩图(6)
如何绘制韦恩图 1.什么是韦恩图? 维恩图用于展示在不同的事物群组(集合)之间的数学或逻辑联系,尤其适合用来表示集合(或)类之间的"大致关系",它也常常被用来帮助推导(或理解推 ...
- 韦恩图进阶之upsetplot:02
获取更多R语言知识,请关注公众号:医学和生信笔记 医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化.主要分享R语言做医学统计学.meta分析.网络药理学.临床预测模型.机器学习.生 ...
- R语言可视化包ggplot2在一张图中画出两条线实战
R语言可视化包ggplot2在一张图中画出两条线实战 目录 R语言可视化包ggplot2在一张图中画出两条线实战
最新文章
- Kafka系列三 java API操作
- 【转】Mutex使用方法(精辟)
- TCP/IP的层次结构以及各层数据封装的过程 (一)
- java web删除文件_Web开发为了java端程序能删除文件的解决办法
- linux跳转乌班图服务器,Linux-Ubuntu环境安装Nginx和配置二级域名跳转
- Entity Framework Codefirst的配置步骤
- 开发者点评GitHub 暗黑模式:太暗了
- rest功能java,java – 功能翻转REST端点的注释
- 【数据结构(C语言)】数据结构-内部排序
- 智能网联(车联网)示范区发展现状分析—华南篇
- 如何在Windows7系统下进行C盘的扩容
- EduCoder-Web程序设计基础-html5—表格高级样式的设置-第3关:设置表格的内边框样式
- 防雷器和电涌保护器的区别
- 最全量子计算硬件概述(建议收藏)
- Java编写的画图板,功能非常齐全,完整代码 附详细设计报告
- 系统软件和应用软件的划分
- C语言实现CRC32算法
- python列表中怎么去掉空值_Python 如何删除列表中的空值
- Android-推荐一个视频压缩库RxFFmpeg
- Kepware助力宾夕法尼亚大学实现校园运营管理
热门文章
- 王者荣耀微信和qq服务器,王者荣耀QQ区VS微信区有什么区别?网友:一个天,一个地...
- (转)太阁立志传立志传5完全攻略
- Android6.0后调用打电话的权限(不仅仅在AndroidManifest中添加权限)
- 威漫哨兵机器人_当漫威哨兵机器人怼上凤凰之力会如何?强如哨兵首领都跪!...
- n行Python代码系列:两行代码去除抖音快手短视频尾部Logo
- IOS环境下vscode、anaconda与python环境配置
- 什么是https(详细),http和https
- 使用Python按文件名所包含的特定关键词实现文档分类整理
- 基于Python的一个疫情传播可视化模拟实验
- 1504:Adding Reversed Numbers