行业动态INDUSTRY DYNAMIC

给你的代谢组加点料:蝴蝶图展示不同类型代谢物的差异情况!!

来源:admin    发布时间:2020-09-03   阅读数:107

多组学结合的研究方式,现在越来越受到科研人员的青睐,也可以说是发高分文章的一条快速路。今天给大家分享如何用蝴蝶图展示不同类型代谢物的差异情况。以下文章来源于红皇后学术 ,作者红皇后学术.


写在前面

多组学结合的研究方式,现在越来越受到科研人员的青睐,也可以说是发高分文章的一条快速路。利用扩增子测序或宏基因组技术与代谢组学技术相结合的研究目前应该说是使用相对比较广泛的一类多组学结合研究方式,尤其是在一些疾病或营养相关的研究中,可以用来解释宿主肠道菌群与标志代谢物之间的关联。对于代谢组数据来说,尤其是非靶向代谢组,其整体的数据结构其实和转录组及蛋白质组数据比较类似,最核心的结果就是差异代谢物。


差异代谢物的展示

这里想说的并不是那些代谢组数据的高级分析方法,本文要说的是我们使用代谢组数据的时候都需要面对的一个问题——差异代谢物统计结果的展示。无论是单独使用代谢组技术进行研究,还是将代谢组与其它组学技术相结合,在最后形成文章的时候都需要面对一个问题,就是要在文章说明实验组和对照组中发现了多少差异代谢物,多少个上调、多少个下调、分别属于那些代谢物类型。

在大部分的研究中,应该就是使用一个表格来展示这个结果了,但是表格中的数字并没有图像来的直观,在转录组数据的分析中,还有一个火山图可以展示差异表达基因的识别结果,但是在代谢组研究中,好像并没有一个提到这个问题就会想到的图像类型。今天给大家带来一个使用蝴蝶图来展示不同类型代谢物差异情况的方法。


数据准备

一开始的目的我是要写一个能够自动处理原始数据的代码,但是后来发现自动处理并不是很可行,这是因为原始数据中有几个问题使用R脚本进行自动处理很难实现。

代谢组的数据通常使用HMDB数据库进行注释,其将代谢物分为4个层级分类,分别为Kingdom、Superclass、Class和Subclass,那么首先面对的一个问题就是要在哪一个层级展示差异代谢物的数目?


给你的代谢组加点料:蝴蝶图展示不同类型代谢物的差异情况!


由于不同研究人员所涉及的样本来源不同,导致其数据结果可能差异很大,比如说有的样本可能只注释到十几个Subclass、而有的样本Subclass的类型可能有数十种,当某一层级的代谢物种类过多的时候,使用该层级的结果会导致突变特别的长,而且每一类代谢物的数目都比较少,不易看出一些规律性的结果。 因此,不同的样本类型要根据数据的实际情况选择在哪个层级进行结果的展示。


这一问题其实使用代码是可以解决的,但是在处理数据的过程中我又发现了第二个问题,那就是HMDB的数据结构好像有点问题(不知道是我自己的数据有这问题还是所有的数据都有这个问题),同一个代谢物的分类名称,比如说Fatty Acyls,有时候出现在Class中,有时候又出现在Subclass中,这就给自动化的数据处理带来了巨大的问题。

在处理代谢组数据的时候,我还遇到了另一个问题,对于一个主要的代谢物Class,其检出的差异代谢物数目很多,而其中可能有一些Subclass主要是上调,而另一些Subclass主要是下调,在这种情况下,如果统一使用Class水平进行展示,就会丢失一部分结果信息。

最终,我放弃了建立自动化的数据处理过程,转而使用手动的方式来统计不同分类差异代谢物的数目,而在最终用于图像绘制的数据中,我会根据实际情况,使用Class+Subclass的方式的数据结构。

先给大家看一下最终的数据格式,数据分为三列,第一列为代谢物分类的名称,之后两列分为为在A组和B组中上调的差异代谢物的数目。


给你的代谢组加点料:蝴蝶图展示不同类型代谢物的差异情况!


??因为蝴蝶图展示的要求,在A组数的差异代谢物数目要是负值,也就是真实上调代谢物数目的相反数。

??为了图像看起来更为美观,在绘图之前手动调整数据中行的顺序,使其最终成为一种两边小中间多的排列顺序。


图像绘制

首先导入绘图数据,并进行格式调整。

AB <- read.table("AB.txt",header = TRUE,sep = "\t")

#将宽格式数据转为长格式

library(reshape2)

AB1 <- melt(AB)

#定义用于标注代谢物数目的向量

label1 <- c(-AB$Group_A,rep("",length(AB$X)))

label2 <- c(rep("",length(AB$X)),AB$Group_B)

#将代谢物分类的名称转换为因子

AB1$X <- factor(AB$X,levels = rev(AB$X),ordered = TRUE)

#定义一个填充颜色标尺

cbbPalette <- c("#56B4E9","#C44E4C")

接下来使用ggplot2进行绘图。 library(ggplot2)

p1 <- ggplot(AB1) +

#绘制条形图

  geom_bar(aes(X,value,fill = variable),position = "identity",stat = "identity") +

#在不同组对应条形的位置添加差异代谢物的数目

  geom_text(aes(X,value - 0.5,label = label1),size = 4,fontface = "bold",hjust = 1) +

  geom_text(aes(X,value + 0.5,label = label2),size = 4,fontface = "bold",hjust = 0) +

#添加图例中显示的名称

  scale_fill_manual(values=cbbPalette,

                    labels = c(paste("Up in ",colnames(AB)[2],sep = ""),

                               paste("Up in ",colnames(AB)[3],sep = ""))) +

#将条形图横放变为蝴蝶图

  coord_flip() +

#添加标题和坐标轴标签

  labs(title=paste(colnames(AB)[2]," versus ",colnames(AB)[3],sep = "")) +

  ylab("Number of DEMs") +

  xlab("") +

#定义图像的取值范围

  ylim(min(AB$Group_A)-2,max(AB$Group_B)+2) +

#以虚线表示在不同组样本中上调的不同类型差异物的平均数目

  geom_hline(aes(yintercept = 0),linetype="dotted")+

  geom_hline(aes(yintercept = mean(AB$Group_A)),linetype="dotted")+

  geom_hline(aes(yintercept = mean(AB$Group_B)),linetype="dotted")+

#调整图像的主题

  theme(panel.background = element_rect(fill='white', colour='black'),

        panel.grid=element_blank(),

        axis.title = element_text(color='black',size=15),

        axis.ticks.length = unit(0.4,"lines"),

        axis.ticks = element_line(color = "white"),

        axis.line = element_line(colour = "black"),

        axis.title.x=element_text(colour='black', size=18),

        axis.title.y=element_text(colour='black', size=0.1),

        axis.text.y = element_text(colour='black',size=16.7),

        axis.text.x = element_text(colour = "white",size = 1),

        legend.title=element_blank(),

        legend.text=element_text(size=15),

        legend.key=element_blank(),legend.position = "bottom",

        legend.background = element_blank(),

        legend.key.height=unit(0.6,"cm"))+

  theme(plot.title = element_text(size=17,colour = "black",hjust = 0.5))

给你的代谢组加点料:蝴蝶图展示不同类型代谢物的差异情况!

多种分组方式

在实际的研究过程中,我们可能并不是只有实验组和对照组一个比较,而是有可能存在两种不同的处理或者具有多种样本的比较方式,下面我们相图像中再添加另外一组差异代谢物数据。

数据的格式与刚才绘图文件一致。

??因为要将两个图拼在一起,所有要保证第二个差异代谢数据文件中,代谢物类型的排列顺序要与第一个文件保持一致。

CD <- read.table("CD.txt",header = TRUE,sep = "\t")

cbbPalette1 <- c("#009E73","#E69F00")

CD1 <- melt(CD)

label3 <- c(-CD$Group_C,rep("",length(CD$X)))

label4 <- c(rep("",length(CD$X)),CD$Group_D)

CD1$X <- factor(CD1$X,levels = rev(CD$X),ordered = TRUE)

p2 <- ggplot(CD1) +

  geom_bar(aes(X,value,fill = variable),position = "identity",stat = "identity") +

  geom_text(aes(X,value - 0.5,label = label3),size = 4,fontface = "bold",hjust = 1) +

  geom_text(aes(X,value + 0.5,label = label4),size = 4,fontface = "bold",hjust = 0) +

  scale_fill_manual(values=cbbPalette1,

                    labels = c(paste("Up in ",colnames(CD)[2],sep = ""),

                               paste("Up in ",colnames(CD)[3],sep = ""))) +

  coord_flip() +

  labs(title=paste(colnames(CD)[2]," versus ",colnames(CD)[3],sep = "")) +

  ylab("Number of DEMs") +

  xlab("") +

  ylim(min(CD$Group_C)-2,max(CD$Group_D)+2) +

  geom_hline(aes(yintercept = 0),linetype="dotted")+

  geom_hline(aes(yintercept = mean(CD$Group_C)),linetype="dotted")+

  geom_hline(aes(yintercept = mean(CD$Group_D)),linetype="dotted")+

  theme(panel.background = element_rect(fill='white', colour='black'),

        panel.grid=element_blank(),

        axis.title = element_text(color='black',size=15),

        axis.ticks.length = unit(0.4,"lines"),

        axis.ticks = element_line(color = "white"),

        axis.line = element_line(colour = "black"),

        axis.title.x=element_text(colour='black', size=18),

        axis.title.y=element_text(colour='black', size=1),

        axis.text.y = element_text(colour = "white",size = 0.1),

        axis.text.x = element_text(colour = "white",size = 1),

        legend.title=element_blank(),

        legend.text=element_text(size=15),

        legend.key=element_blank(),legend.position = "bottom",

        legend.background = element_blank(),

        legend.key.height=unit(0.6,"cm"))+

  theme(plot.title = element_text(size=17,colour = "black",hjust = 0.5))

图像的绘制方法与第一幅图一模一样,唯一的区别是这一幅图将表示代谢物分类的名称的标签设置为空。

之后使用grid包将两幅图拼在一起。

library(grid)

png(filename="DEMs.png",res=600,height=5400,width=7200)

grid.newpage()

pushViewport(viewport(layout = grid.layout(1,3)))

vplayout <- function(x, y) {viewport(layout.pos.row = x, layout.pos.col = y)}

print(p1,vp = vplayout(1,1:2))

print(p2,vp = vplayout(1,3))

dev.off()

给你的代谢组加点料:蝴蝶图展示不同类型代谢物的差异情况!

到这里这幅图就画完了,这幅图可以直观的展示样本中主要的差异代谢物类型,以及这些差异代谢物是上调还是下调。

此外,对于一些在后续分析中涉及的重点差异代谢物,也能够给出一个指引,比如说在文中想要重点说一下某几个代谢物 (通常这些代谢物会参与某一个相同的路径,属于同一类代谢物),如果直接就说某某物质上调或下调表达多少倍有些过于直接了,并且有时可能会比较跳跃,对于不了解这一个物质的人来说就不容易跟上思路,这个图至少能让我们多说几句。



您可能还喜欢:

代谢组|LC-MS非靶标代谢组学检测

a级黄色片推出代谢组业务助力微生物组多组学研究



分享到: