基于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)。 这还有一个额外的好处,即无论是阅读论文还是参加讲座,观众都必须花费更少的时间和精力来掌握结果。

0cc938fa-8505-48a4-ac5e-491daae21717.png

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
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(1051810510),
    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)
f6947432-6007-495d-b28a-3a057a46e30f.png

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)
7c062cea-6c00-47d6-ab79-9032f7614d95.png

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)

75c955ef-f686-454c-bc6c-459868b0b69c.png



要使用 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(10518255), 
 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")
c8893e83-3ab2-4554-bd02-7b227979ca4d.svg


当然,我们可以使用 ggplot 主题和函数来调整绘图。
gganatogram(data=organPlot, fillOutline='#a6bddb', organism='human', sex='male', fill="colour") + 
theme_void()
e419020c-8ee6-4ef8-a359-24d7ffc00fa3.svg

我们也可以根据给予每个器官的值来填充各个组织的不同颜色;甚至,gganatogram 可以绘制细胞亚结构的相关组织图;或者是其他物种对应的解剖表达图谱。
6140f3e6-c6aa-4e29-a6de-caf85b50b502.svg


0196b125-30e7-4328-9af2-20e3150dfdf2.svg


更多 gganatogram 解剖图谱绘制示例可以参考其在 Github 的介绍, https://github.com/jespermaag/gganatogram, 感兴趣的童鞋可以去尝试研究一下。

总的来说, gganatogram 是一款强大的 R 包,它可以根据 ggplot2Expression 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——

7b000c03-d00b-4433-bfd7-c5c2879f36ec.gif



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

posted @ 2019-05-30 21:28  章鱼猫先生  阅读(57)  评论(0编辑  收藏  举报