基于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指南,利用 ...
随机推荐
- Centos 7 配置Tomcat跳转Https
前言:在网络安全盛行的时代下,有时业务为了安全需求要使用https协议,包括http.nginx.tomcat等,本篇简单分享一下tomcat跳转https配置. 1.环境 Centos 7.9 2. ...
- 分布式缓存的一致性 Hash 算法
一.使用一致性 Hash 算法的原因 简单的路由算法可以使用余数 Hash:用服务器数据除缓存数据 KEY 的 Hash 值,余数为服务器列表下标编码.这种算法可以满足大多数的缓存路由需求.但是,当分 ...
- AWS IAM介绍
前言 AWS是世界上最大的云服务提供商,它提供了很多组件供消费者使用,其中进行访问控制的组件叫做IAM(Identity and Access Management), 用来进行身份验证和对AWS资源 ...
- python中socket使用UDP协议简单实现服务端与客户端通信
UDP为不可靠传输,也就是发送方不关心对方是否收到消息,一般用于聊天软件.但现在的聊天软件虽然使用的是UDP协议,但已从代码层面上解决了丢失信息的问题. 下面使用python代码简单实现了服务端与客户 ...
- [Git]解决:error: The following untracked working tree files would be removed by checkout:
1 文由 不小心在本地对master分支做了修改,并commit了,但是没有push成功(因为处于防止代码提交风险,产品部对普通开发者没有项目master的push权限) 后来又经过了一顿骚操作(我已 ...
- Vue启用报错 RangeError: Invalid typed array length: -4095
近期开发的前端项目项目启用失败,记录下修复过程 RangeError: Invalid typed array length: -4095 错误原因:node版本问题,安装10.x.x 即可 重新安装 ...
- CommunityToolkit.Mvvm8.1 viewmodel源生成器写法(3)
本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址 ...
- OctConv:八度卷积复现
摘要:不同于传统的卷积,八度卷积主要针对图像的高频信号与低频信号. 本文分享自华为云社区<OctConv:八度卷积复现>,作者:李长安 . 论文解读 八度卷积于2019年在论文<Dr ...
- Pytorch实践模型训练(损失函数)
一个深度学习项目包括了: 模型设计.损失函数设计.梯度更新方法.模型保存和加载和模型训练,其中损失函数就像一把衡量模型学习效果的尺子,训练模型的过程就是优化损失函数的过程,模型拿到数据之后有一个非常重 ...
- ROS2的安装与使用(超详细图文教程)
ROS2的安装与使用(超详细图文教程) 如果前面的虚拟机以及Ubuntu22.04镜像都安装好了,根据目录直接跳到ROS2的安装. 资料参考于:古月居 VMware虚拟机的安装 安装地址: 对于不了解 ...