摘要

将数据显示到解剖结构上,是一种可以快速观察组织相关信息的便捷技术。然而,绘制组织是一项复杂的任务(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.0ggplot2 v.3.0.0ggpolypath 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的解剖图和组织模块可视化的更多相关文章

  1. 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)

    原文:基于Asterisk的VoIP开发指南--Asterisk 模块编写指南(1) 1 开源项目概述 Asterisk是一个开源的软件包,通常运行在Linux操作系统平台上.Asterisk可以用三 ...

  2. 基于MarkDown和Github图床以及SourceTree的一站式文章编辑和发布

    标题: 基于MarkDown和Github图床以及SourceTree的一站式文章编辑和发布 作者: 梦幻之心星 sky-seeker@qq.com 标签: [MarkDown,Github,图床,S ...

  3. 论文解读丨基于局部特征保留的图卷积神经网络架构(LPD-GCN)

    摘要:本文提出一种基于局部特征保留的图卷积网络架构,与最新的对比算法相比,该方法在多个数据集上的图分类性能得到大幅度提升,泛化性能也得到了改善. 本文分享自华为云社区<论文解读:基于局部特征保留 ...

  4. matlab中,在灰度解剖图上叠加阈值图,by by DR. Rajeev Raizada

    1.参考 reference 1. tutorial主页:http://www.bcs.rochester.edu/people/raizada/fmri-matlab.htm. 2.speech_b ...

  5. 一款基于jQuery饼状图比例分布数据报表

    今天给大家带来一款基于jQuery饼状图比例分布数据报表.这款报表插件适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览  ...

  6. 第一篇:R语言数据可视化概述(基于ggplot2)

    前言 ggplot2是R语言最为强大的作图软件包,强于其自成一派的数据可视化理念.当熟悉了ggplot2的基本套路后,数据可视化工作将变得非常轻松而有条理. 本文主要对ggplot2的可视化理念及开发 ...

  7. [python] 基于matplotlib实现圆环图的绘制

    圆环图本质上是一个中间切出一块区域的饼状图.可以使用python和matplotlib库来实现.本文主要介绍基于matplotlib实现圆环图.本文所有代码见:Python-Study-Notes # ...

  8. 一个画组织解剖图R包

    地址: https://github.com/jespermaag/gganatogram

  9. C# Winform开发框架模块图(平台核心模块+示例模块)

    企业版V4.0 - 模块图   企业版V4.0 - 项目解决方案   Client/Server构架,有两个解决方案:     客户端解决方案说明:     服务端解决方案说明: C/S系统开发框架- ...

  10. 基于Neptune开发板的键盘蓝牙模块DIY指南

    目录: 1.下载开发板程序2.安装USB串口(CH340)驱动3.安装烧写工具4.烧写开发板程序 本期我们带来基于润和Neptune开发板(以下简称Neptune开发板)的键盘蓝牙模块DIY指南,利用 ...

随机推荐

  1. Java面试——架构设计与分布式

    更多内容,移步 IT-BLOG 一.用 Java 自己实现一个 LRU LRU(Least Recently Used:最近最少使用):简单的说,就是保证基本的 Cache容量,如果超过容量则必须丢掉 ...

  2. Maven常用依赖包简单

    Maven官方仓库:Maven Repository: junit » junit (mvnrepository.com) Mysql 1 <!--Mysql--> 2 <depen ...

  3. 手机号码归属地的自动查询.py(亲测有效)

    import requests url = "http://m.ip138.com/sj.asp?mobile=" kv = {'user-agent':'Mozilla/5.0' ...

  4. 迁移学习(DCCL)《Domain Confused Contrastive Learning for Unsupervised Domain Adaptation》

    论文信息 论文标题:Domain Confused Contrastive Learning for Unsupervised Domain Adaptation论文作者:Quanyu Long, T ...

  5. [IDE]IDEA build artifacts过程很慢的解决方案[转载]

    解决方案 可能1 可能是缓存的文件太多了导致: File->Invalidate Caches /Restart,清理缓存, 并重启IDEA.重启之后,会重建索引, 此过程较慢, 但build的 ...

  6. 6.理解Jwt代码

    1.昨天主要是对Jwt的代码里面不熟悉的代码进行了简要的理解,发现其实有些流程并不是普通程序员自己写的,而是自己进行拓展,这些流程是开源程序员写的开发流程:我发现这些代码一般要么是父类的方法实现,要么 ...

  7. 手机号码归属地 API 实现个性化推荐的思路分析

    前言 随着移动互联网和智能手机的普及,越来越多的人使用手机上网和购物,移动营销已成为企业获取用户和提升品牌知名度的重要手段.手机号码归属地 API 作为移动营销的关键工具,具有广阔的应用前景. 本文将 ...

  8. Unable to find real location for: <frozen codecs>

    问题描述 pycharm 在debug时出现了如下bug ----------------------------------------------------------------------- ...

  9. COIG:开源四类中文指令语料库

    CHINESE OPEN INSTRUCTION GENERALIST: A PRELIMINARY RELEASE 论文:https://arxiv.org/pdf/2304.07987v1.pdf ...

  10. 2009年NOIP提高组真题-HanKson的趣味题(GCD&LCM优化)

    2009年NOIP提高组真题-HanKson的趣味题(GCD&LCM优化) 本题的编码是用Python实现的,C++的思路也是相同的. 希望本文能够帮助到你! 题目: 暴力法: 直接根据题目的 ...