基于ggplot2的解剖图和组织模块可视化
摘要
将数据显示到解剖结构上,是一种可以快速观察组织相关信息的便捷技术。然而,绘制组织是一项复杂的任务(a complex task),需要解剖学和艺术方面的专业知识。虽然已经存在可用于在解剖图上显示基因表达的基于网络的应用技术,但是其他非遗传学科(non-genetic disciplines)缺乏类似的工具。此外,基于网络的工具通常缺乏与编程语言(如 R)中的包相关联的模块性( lack the modularity associated with packages in programming languages)。这里我介绍 gganatogram,一个根据 ggplot2 的图形语法和来自 Expression Atlas 公众可用解剖图的组合,来绘制模块化物种解剖图的 R 包。这种组合允许快速,简单,模块化和可重复地生成解剖图。仅使用一个命令以及一个具有组织名称,分组,颜色和值的数据框,该工具就可以使用户能够以特定的颜色可视化特定的人体和小鼠组织,或者根据变量进行分组,或显示特定的值,例如基因-表达(gene-expression),药代动力学(pharmacokinetics)或所选组织之间的细菌负荷(bacterial load)。我希望这个工具对更广泛的生物科学界有用。也欢迎社区成员提交额外的解剖图,并将其纳入该软件包中。
介绍
在多细胞生物中有效地显示组织信息可能是一个费力且耗时的过程(a laborious and time consuming process)。 研究人员通常希望展示值之间的差异,例如一个生物体组织之间,或不同组中具有相似组织之间的基因表达值或药代动力学值。
虽然条形图和热图提供了组间差异的信息视图,但很难立即观察到生物学意义(图 1a-b)。 与解剖图相比,后者更易于快速发现组织或组之间的差异,并可立即为这些观察提供生物学背景(biological context)(图 1c)。 这还有一个额外的好处,即无论是阅读论文还是参加讲座,观众都必须花费更少的时间和精力来掌握结果。

Figure 1. Comparison between barplot (top left), heatmap (top right), and anatogram (bottom) to display tissue values between groups.
已经存在几种在不同组织中显示基因表达的在线工具(如 Expression Atlas、Semantic Body Browser、TISSUES 2.0)。 虽然这些工具提供了关于各种组织和生物体中基因表达的重要信息,但除遗传学之外的其他学科由于(缺少)对基因的关注而无法利用这些应用(other disciplines besides genetics are unable to utilise these applications due to the focus on genes)。 此外,这些工具通常只包含一组可预测的预定义实验,导致难以呈现我们自己的数据。 还有其他值得注意是,使用这些工具,重建绘图或从结果中自动创建绘图可能很费力。
这里介绍的 gganatogram,是一个利用 Expression Atlas 中公开提供的鼠和人体解剖图,基于 ggplot2 的开源 R 软件包。 使用此软件包,任何 R 用户都可以轻松快速地查看具有指定颜色,组和值的解剖图。 使用 ggplot2 中熟悉的语法,该程序可用于模块化解剖图的生成。
方法
实现(Implementation)
gganatogram 存储在 neuroconductor,一个用于快速测试(rapid testing)和可重现计算成像软件(reproducible computational imaging software)传播的开源平台上, 其开发版本可以在 https://github.com/jespermaag/gganatogram 找到,它允许社区通过创建坐标文件来发布包的 issues,提交请求或添加解剖图。
source("https://neuroconductor.org/neurocLite.R")
neuro_install("gganatogram", release = "stable",
release_repo = latest_neuroc_release(release = "stable"))
开发版本可以从 github 安装:
devtools::install_github("jespermaag/gganatogram")
简而言之,为了生成包含所有组织坐标的主列表对象,作者从 Expression Atlas 下载了SVG文件(可从 gganatogram GitHub 中获取)并使用自定义的 python 脚本(可从 GitHub 中获得)处理它们。 该脚本通过 SVG 文件来提取名称,坐标和 SVG 转换信息。 然后在 R 中对它们进行后处理以创建构成组织坐标的 rda 文件。
操作(Operation)
gganatogram 需要满足 R≥3.0.0,ggplot2 v.3.0.0 和 ggpolypath v.0.1.0 。 该程序应该能够在任何具有 R 系统要求的计算机上运行。可以使用包含器官名称,颜色,类型或值的基本 data.frame 生成图形。 根据 data.frame 的顺序,一次一个地绘制器官。 每个连续行的组织将在前一个上面分层。 gganatogram 包提供了四个这样的 data.frame,其中包含可用于绘图的所有组织,每个人和小鼠一个,并按性别划分。
hgMale_key, hgFemale_key, mmMale_key, mmFemale_key
这些数据框已经指定了颜色,类型和指定的随机数,以便于开始绘图。
head(hgFemale_key)
organ colour type value
1 pancreas orange digestion 10.373146
2 liver orange digestion 19.723172
3 colon orange digestion 14.853335
4 bone_marrow #41ab5d other 19.681587
5 urinary_bladder orange digestion 14.914273
6 stomach orange digestion 2.667599
主要功能是 gganatogram()。 默认情况下,没有任何参数,它会绘制具有标准 ggplot2 参数的男性人的轮廓。 通过添加几个选项,可以快速更改为女性,通过选定的颜色填充指定的器官,或者根据值填充器官(图2)。
library(gganatogram)
library(gridExtra)
organPlot <- data.frame(organ = c("heart", "leukocyte", "nerve", "brain", "liver", "stomach", "colon"),
type = c("circulation", "circulation", "nervous␣system", "nervous␣system", "digestion", "digestion", "digestion"),
colour = c("red", "red", "purple", "purple", "orange", "orange", "orange"),
value = c(10, 5, 1, 8, 10, 5, 10),
stringsAsFactors=F)
A <- gganatogram()
B <- gganatogram(fillOutline="#a6bddb", sex="female") + theme_void()
C <- gganatogram(data=organPlot, fillOutline="#a6bddb", organism="human",
sex="female", fill="colour")+ theme_void()
D <- gganatogram(data=organPlot, fillOutline="#a6bddb", organism="human",
sex="female", fill="value")+ theme_void()
grid.arrange(A, B, C, D, ncol=4)

Figure 2. (A) Default plot generated by calling gganatogram(), (B) adding female, plotting specified organs by (C) colour, (D) value.
示例
要绘制每个生物体的所有组织,请使用每个生物体和性别所提供的密钥文件。 这将按照每个 data frame 的顺序显示所有组织。 要更改器官彼此叠加的顺序,请重新排序数据框以使这些组织位于底部。
library(gganatogram)
library(gridExtra)
hgMale <- gganatogram(data=hgMale_key, fillOutline="#a6bddb", organism="human",
sex="male", fill="colour") + theme_void()
hgFemale <- gganatogram(data=hgFemale_key, fillOutline="#a6bddb",
organism="human", sex="female", fill="colour") + theme_void()
mmMale <- gganatogram(data=mmMale_key, fillOutline="#a6bddb", organism="mouse",
sex="male", fill="colour") + theme_void()
mmFemale <- gganatogram(data=mmFemale_key, outline = T, fillOutline="#a6bddb",
organism="mouse", sex="female", fill="colour") + theme_void()
grid.arrange(hgMale, hgFemale, mmMale, mmFemale, ncol=4)

hgMale <- gganatogram(data=hgMale_key, fillOutline='#440154FF', organism='human', sex='male', fill="value") + theme_void() + scale_fill_viridis()
hgFemale <- gganatogram(data=hgFemale_key, fillOutline='#440154FF', organism='human', sex='female', fill="value") + theme_void() + scale_fill_viridis()
mmMale <- gganatogram(data=mmMale_key, fillOutline='#440154FF', organism='mouse', sex='male', fill="value") + theme_void() + scale_fill_viridis()
mmFemale <- gganatogram(data=mmFemale_key, outline = T, fillOutline='#440154FF', organism='mouse', sex='female', fill="value") +theme_void() + scale_fill_viridis()
grid.arrange(hgMale, hgFemale, mmMale, mmFemale, ncol=2)

要使用
gganatogram 函数,我们需要具有器官(organ)、颜色(colour)和相关值(value)的数据框(data frame)。
organPlot <- data.frame(organ = c("heart", "leukocyte", "nerve", "brain", "liver", "stomach", "colon"),
type = c("circulation", "circulation", "nervous system", "nervous system", "digestion", "digestion", "digestion"),
colour = c("red", "red", "purple", "purple", "orange", "orange", "orange"),
value = c(10, 5, 1, 8, 2, 5, 5),
stringsAsFactors=F)
head(organPlot)
organ type colour value
1 heart circulation red 10
2 leukocyte circulation red 5
3 nerve nervous system purple 1
4 brain nervous system purple 8
5 liver digestion orange 2
6 stomach digestion orange 5
使用 gganatogram 函数,根据颜色填充器官。
gganatogram(data=organPlot, fillOutline='#a6bddb', organism='human', sex='male', fill="colour")
当然,我们可以使用
ggplot 主题和函数来调整绘图。
gganatogram(data=organPlot, fillOutline='#a6bddb', organism='human', sex='male', fill="colour") +
theme_void()
我们也可以根据给予每个器官的值来填充各个组织的不同颜色;甚至,gganatogram 可以绘制细胞亚结构的相关组织图;或者是其他物种对应的解剖表达图谱。
更多
gganatogram 解剖图谱绘制示例可以参考其在 Github 的介绍,
https://github.com/jespermaag/gganatogram, 感兴趣的童鞋可以去尝试研究一下。
总的来说,
gganatogram 是一款强大的 R 包,它可以根据
ggplot2 和
Expression Atlas 的信息轻松地显示解剖图,这些工具组合成了一个更加强大的工具来绘制和显示组织信息。
参考资料:
Maag JLV. gganatogram: An R package for modular visualisation of anatograms and tissues based on ggplot2 [version 1; referees: 1 approved]. F1000Research 2018, 7:1576 (doi: 10.12688/f1000research.16409.1)
Jesper Maag,Create anatograms using ggplot2,Github
——The End——

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
基于ggplot2的解剖图和组织模块可视化的更多相关文章
- 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)
原文:基于Asterisk的VoIP开发指南--Asterisk 模块编写指南(1) 1 开源项目概述 Asterisk是一个开源的软件包,通常运行在Linux操作系统平台上.Asterisk可以用三 ...
- 基于MarkDown和Github图床以及SourceTree的一站式文章编辑和发布
标题: 基于MarkDown和Github图床以及SourceTree的一站式文章编辑和发布 作者: 梦幻之心星 sky-seeker@qq.com 标签: [MarkDown,Github,图床,S ...
- 论文解读丨基于局部特征保留的图卷积神经网络架构(LPD-GCN)
摘要:本文提出一种基于局部特征保留的图卷积网络架构,与最新的对比算法相比,该方法在多个数据集上的图分类性能得到大幅度提升,泛化性能也得到了改善. 本文分享自华为云社区<论文解读:基于局部特征保留 ...
- matlab中,在灰度解剖图上叠加阈值图,by by DR. Rajeev Raizada
1.参考 reference 1. tutorial主页:http://www.bcs.rochester.edu/people/raizada/fmri-matlab.htm. 2.speech_b ...
- 一款基于jQuery饼状图比例分布数据报表
今天给大家带来一款基于jQuery饼状图比例分布数据报表.这款报表插件适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览 ...
- 第一篇:R语言数据可视化概述(基于ggplot2)
前言 ggplot2是R语言最为强大的作图软件包,强于其自成一派的数据可视化理念.当熟悉了ggplot2的基本套路后,数据可视化工作将变得非常轻松而有条理. 本文主要对ggplot2的可视化理念及开发 ...
- [python] 基于matplotlib实现圆环图的绘制
圆环图本质上是一个中间切出一块区域的饼状图.可以使用python和matplotlib库来实现.本文主要介绍基于matplotlib实现圆环图.本文所有代码见:Python-Study-Notes # ...
- 一个画组织解剖图R包
地址: https://github.com/jespermaag/gganatogram
- C# Winform开发框架模块图(平台核心模块+示例模块)
企业版V4.0 - 模块图 企业版V4.0 - 项目解决方案 Client/Server构架,有两个解决方案: 客户端解决方案说明: 服务端解决方案说明: C/S系统开发框架- ...
- 基于Neptune开发板的键盘蓝牙模块DIY指南
目录: 1.下载开发板程序2.安装USB串口(CH340)驱动3.安装烧写工具4.烧写开发板程序 本期我们带来基于润和Neptune开发板(以下简称Neptune开发板)的键盘蓝牙模块DIY指南,利用 ...
随机推荐
- springboot格式化timestamp时间
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
- Kafka 集群调优
更多内容,前往 IT-BLOG 单个 kafka服务器足以满足本地开发或 POC要求,使用集群的最大好处是可以跨服务器进行负载均衡,再则就是可以使用复制功能来避免因单点故障造成的数据丢失.在维护 Ka ...
- 最强分布式搜索引擎——ElasticSearch
最强分布式搜索引擎--ElasticSearch 本篇我们将会介绍到一种特殊的类似数据库存储机制的搜索引擎工具--ES elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以 ...
- Three.js 进阶之旅:全景漫游-初阶移动相机版
声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 摘要 3D 全景技术可以实现日常生活中的很多功能需求,比如地图的街景全景模式.数 ...
- react之点语法(利用函数组件)
index.js import React, { Component } from 'react' import MyCom from './MyCom'; export default class ...
- NetCore 使用 Swashbuckle 搭建 SwaggerHub
什么是SwaggerHub? Hub 谓之 中心, 所以 SwaggerHub即swagger中心. 什么时候需要它? 通常, 公司都拥有多个服务, 例如商品服务, 订单服务, 用户服务, 等等, 每 ...
- centos7搭建bsc全节点
Centos7搭建bsc全链节点 服务器配置 CPU:8 Cores - 16 Threads RAM:131072 MB Storage:2x 2000GB NVMe Bandwidth:8400 ...
- 自己动手从零写桌面操作系统GrapeOS系列教程——1.2 GrapeOS真机演示
学习操作系统原理最好的方法是自己写一个简单的操作系统. GrapeOS操作系统之前一直运行在模拟器和虚拟机中,今天我们来演示一下GrapeOS在真机上运行的情况. 一.物理机真机 今天演示用的真机是一 ...
- 隐私安全常用网站备忘#privacy
在线查询浏览器WebRTC漏洞 地址 个人数据泄露(#包含扣扣和phone,微博等) 地址 最全的隐私保护指南 地址 钟馗之眼 地址 shodan#暗黑版goole搜索引擎(需代理访问) 地址 社工查 ...
- servlet 没有实例化可以直接调用非静态方法??
今天练习servlet时,居然发现没有实例化可以直接调用非静态方法.看了好长时间发现:省去了this关键字.记录一下. public class Servlet2 extends GenericSer ...