说到集合数据可视化,我们第一时间想到的就是韦恩图。在 NGS 相关的研究中,韦恩图用来直观表征不同的集合之间元素重叠关系,是经常在文献中出现的图。

在集合数少的时候韦恩图是很好用的,但是当集合数多比如 5 个以上的时候那就会看的眼花缭乱了。比如下面这张发表在 Nature 上,显示了香蕉基因组与其他五种物种的基因组之间关系的 6 个集合韦恩图。

虽然这个图看起来很酷很有趣,但却也让人眼花:我们很难尝试从中提取任何信息;很难去跟踪哪个交叉点涉及哪些集合;也不清楚哪个是可视化中最大的交叉点——要获取这些信息我们必须逐一阅读图中的标签。

为了解决上面的问题,今天介绍一个专门用来做集合可视化,并且不受输入的集合个数限制的 R 包 UpSetR ,该包来源于 UpSet(一种新的用于数据集,以及它们的交集、组合定量分析的可视化技术)。Python 里面也有一个相似的包 py-upset 。此外还有个基于网页版本的 UpSetR shiny app 以及基于 github 的源代码库。


图形解读

UpSetR 可视化的结果图的基本上长得像下图这个样子:

与之相对应的韦恩图:

上述两个图是从 UpSetR 内置的分析了不同电影所属类型的 movies 数据集中选取了 Name、Action Comedy、Drama 4 列数据进行画图得到的结果:

  • 黑色点表示该区域是有数据的且上方的 Intersection Size 条形图是该区域的数值大小;灰色的点表示该区域没有数据;

  • 不同点连线表示存在交集,具体交集的个数可以看上方的条形图;

  • 不同类型的数据的总量可以看左边的 Set Size 条形图。

安装

UpSetR 有两种方式安装:

# 从 CRAN 安装install.packages("UpSetR")

# 从 Github 上安装devtools::install_github("hms-dbmi/UpSetR")

【左右滑动查看完整信息】


数据导入

UpsetR 接受三种类型的数据输入:

  • 表格形式,在 R 语言里就是数据框了。行表示元素,列表示数据集分配和额外信息。

  • 元素名的集合( fromList )。

  • venneuler 包引入的用于描述集合交集的向量 ( fromExpression)。

#fromListlistinput <- list(one = c(1, 2, 3, 5, 7, 8, 11, 12, 13), two = c(1, 2, 4, 5, 10), three = c(1, 5, 6, 7, 8, 9, 10, 12, 13))

#fromExpressionexpressionInput <- c(one = 2, two = 1, three = 2, `one&two` = 1, `one&three` = 4, `two&three` = 1, `one&two&three` = 2)

【左右滑动查看完整信息】

接下来就可以绘制绘制图形了:

library(UpSetR)upset(fromList(listinput), order.by = "freq")

#下面绘制的图形等同于上图upset(fromExpression(expressionInput), order.by = "freq")

【左右滑动查看完整信息】


参数详解

下面所有的例子都将使用 UpSetR 内置的数据集 movies 来绘制。

#导入数据movies <- read.csv(system.file("extdata", "movies.csv", package = "UpSetR"), header = TRUE, sep = ";")#先大致浏览一下该数据集,数据集太长,就只看前几列knitr::kable(head(movies[,1:10]))

【左右滑动查看完整信息】

该数据集展示的是电影名(name)、发行时间(ReleaseDate)以及电影类型,数据的详细信息自己可以看去。

UpsetR 绘制集合可视化图形使用函数 upset()。

upset(movies, nsets = 6, number.angles = 30, point.size = 2, line.size = 1, mainbar.y.label = "Genre Intersections", sets.x.label = "Movies Per Genre", text.scale = c(1.3, 1.3, 1, 1, 1.5, 1))

【左右滑动查看完整信息】

解释一下上面部分参数:

  • nsets:顾名思义,就是展示几个集合,movies 数据集有 20 几个集合,这里只展示其中的6个,另外从图中可以看出,这 6 个集合应该不是按顺序选择的。

  • numble.angle:这个参数就是调整柱子上数字的角度的。

  • mainbar.y.label/sets.x.label:坐标轴名称。

  • text.scale():有六个数字,分别控制 c(intersection size title, intersection size tick labels, set size title, set size tick labels, set names, numbers above bars) 这 6 个字体的大小。

很多时候我们想要看特定的几个集合:

upset(movies, sets = c("Action", "Adventure", "Comedy", "Drama", "Mystery", "Thriller", "Romance", "War", "Western"), mb.ratio = c(0.55, 0.45), order.by = "freq")

【左右滑动查看完整信息】

参数解释:

  • mb.ratio:控制上方条形图以及下方点图的比例。

  • order.by:如何排序,这里 freq 表示从大到小排序展示,其他选项有 degree 以及先按 freq 再按 degree 排序。

通过 keep.order 参数来对各个变量进行排序:

upset(movies, sets = c("Action", "Adventure", "Comedy", "Drama", "Mystery", "Thriller", "Romance", "War", "Western"), mb.ratio = c(0.55, 0.45), order.by = "freq", keep.order = TRUE)

【左右滑动查看完整信息】

也可以按 group 进行展示,下图展示的就是按各个变量自身、两个交集、三个交集......依次展示。参数 cutoff 控制每个 group 显示几个交集。参数 intersects 控制总共显示几个交集。

upset(movies, nintersects = 60, group.by = "sets", cutoff = 6)

【左右滑动查看完整信息】

还有很多参数比如控制颜色的参数,点、线大小等,具体可通过 ?upset 或者 help(upset) 查看帮助信息。

下一篇文章,我们将会介绍一下 UpSetR 其他一些高级参数的用法。

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

UpSetR:多数据集绘图可视化处理利器相关推荐

  1. (转)Python--matplotlib绘图可视化知识点整理

    Python--matplotlib绘图可视化知识点整理 参考 matplotlib-绘制精美的图表 matplotlib.pyplot.plt参数介绍 12345678 import matplot ...

  2. Python--matplotlib 绘图可视化练手--折线图/条形图

    最近学习matplotlib绘图可视化,感觉知识点比较多,边学习边记录. 对于数据可视化,个人建议Jupyter Notebook. 1.首先导包,设置环境 import pandas as pd i ...

  3. 使用Google Colab对PUBG的玩家死亡数据集进行可视化分析

    使用Google Colab对PUBG的玩家死亡数据集进行可视化分析 数据集 数据集可以在Kaggle(https://www.kaggle.com/)中找到.需要注册Kaggle账号后,Accoun ...

  4. Matlab:Matlab编程语言应用之三维绘图可视化(基础知识点基本函)的使用方法简介、案例实现(三维曲线图机械阻尼振动三维等高线图等案例)之详细攻略

    Matlab:Matlab编程语言应用之三维绘图可视化(基础知识点&基本函)的使用方法简介.案例实现(三维曲线图&机械阻尼振动&三维等高线图等案例)之详细攻略 目录 三维绘图基 ...

  5. python学习拾遗(五)——Matplotlib绘图可视化

    Matplotlib绘图可视化 简单介绍 Matplotlib.pyplot模块 一.快速绘图 1.调用figure()创建一个绘图对象 2.通过调用plot()函数在当前的绘图对象中进行绘图 3.设 ...

  6. 【用pandas_alive几行代码绘制竞赛动图】10.新南威尔士州 COVID 可视化(测试代码+数据集+绘图参数解析)

    目录 10.新南威尔士州 COVID 可视化 新南威尔士州 COVID 可视化API说明: 新南威尔士州 COVID 可视化数据集 新南威尔士州 COVID 可视化例程 总结 欢迎关注 『pandas ...

  7. Python实现对Bitly的USA.gov数据集的可视化

    数据集链接:example.txt import json import pandas import seaborn import numpydef main():# 读取json文件 来自Bitly ...

  8. Python Seaborn (3) 分布数据集的可视化

    作者:未禾 数据猿官网 | www.datayuan.cn 今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区 在处理一组数据时 ...

  9. 数据可视化的利器-Seaborn简易入门

    Seaborn是针对统计绘图的,一般来说,Seaborn能满足数据分析90%的绘图需求.本站整理的Seaborn的41个样例代码,在github进行分享,绝大部分数据可视化的问题可以参考这里的样例代码 ...

最新文章

  1. 【pytorch】torch.mm,torch.bmm以及torch.matmul的使用
  2. 著名开源项目,神秘Bug影响超20000个项目,原因竟是作者删库跑路?
  3. Two Merged Sequences
  4. Linux学习:vim 的 3 种命令模式及基本操作
  5. 工程师如何给女友买包?问问阿里“百事通”
  6. 未雨绸缪:从软件测试到质量保证
  7. 镜头MTF传递函数解读
  8. 给数据库表字段设置默认值
  9. 【EOJ Monthly 2019.02 - E】中位数(二分 ,中位数 ,−1/1变换,dp求解DAG最长路)
  10. Python--day48--ORM框架SQLAlchemy操作表
  11. JAVA正则表达式分析爬虫数据
  12. MVC @RenderBody、@RenderSection、@RenderPage、@Html.RenderPartial、@Html.RenderAction
  13. Angular通过CORS实现跨域方案
  14. 永洪科技贺新颖:业务中台+数据中台,赋能企业核心业务
  15. 求偶数c语言程序,用C语言编写一道程序计算100以内偶数的和
  16. 自定义ckeditor图片上传插件
  17. 调用百度翻译机器人接口纯代码
  18. JavaFX:集成MarkDown
  19. TrustZone技术简介
  20. sharedpreferences存不进去_搞笑:主人买了一个钢铁侠模型,小猫咪直接就坐进去了...

热门文章

  1. 现在的Java面试已经和2年前完全不一样了!
  2. 开源性能监控工具APM之Skywalking和Pinpoint的实测对比
  3. 这6种最常见分布式事务解决方案!请拿走不谢!
  4. 程序员的幸福:上个月被裁拿赔偿,这个月找到涨薪50%的工作
  5. 你需要学好知识图谱——用AI技术连接世界
  6. 实用的项目管理系统,才能让协同工作更顺畅
  7. 客服团队OKR怎么写?看最新客服OKR模板
  8. 市场营销部门OKR案例
  9. 减法中的减数和被减数
  10. 求主析取范式与主合取范式