发送
生信
到本公众号后台,
学习各种作图技能
。
好的分析和图形化展示,可以提供大量的信息,同时兼顾简洁优雅。我们以Ravel以在PNAS(2010)发表的研究为例,该研究分析了396个生育期女性的生殖道细菌群落。这是其中的一张热图:
乍一眼看上去眼花缭乱,其实我们可以把这个图分成一个个的模块,并分别解释。
-
对样品进行聚类,菌群组成接近的样品会聚在一起。对得到的聚类进行命名。
-
标记每个样品的PH值和Nugent Score,值越高,代表“越不健康”。
-
对所有的物种进行聚类,丰度接近的物种会聚在一起。
-
标记PH,NugentScore和菌群相关系数的颜色。颜色越红,代表菌群对PH/NugentScore的“贡献越大”。
-
计算菌群的菌群多样性,用的是shannon index,菌群多样性越高,代表杂菌越多“越不健康”。
-
每类菌的丰度,注意用的是log值换算。
这是我看到的最好的热图之一(缺点是颜色搭配略老气)。如何把这个图做出来?
再复杂的分析,再好看的图,其实都可以拆解为一个个简单的模块,再组合起来。
我们现在拆解一下,为了做出这个热图,需要哪些数据?需要哪些计算?用哪个工具?
模块
|
说明
|
需要什么数据?
|
需要做什么计算?
|
用
R
语言的什么工具实现?
|
A
|
样品聚类
|
菌群组成
|
计算样品距离
|
hclust
|
B
|
PH/N score
用颜色标记
|
每个病人的
PH
和
N score
数据
|
不需要计算
|
RColorBrewer
|
C
|
物种聚类
|
菌群组成
|
计算物种距离
|
hclust
|
D
|
PH/N
和菌群相关性
|
每个病人的
PH
,
N score
数据,菌群组成
|
计算
PH/Nscore
和菌群的两两相关系数(有几个菌,就有几个系数)
|
cor.test
|
E
|
用
barplot
展示每个样品的物种多样性
|
菌群组成
|
计算
shannon
指数
|
diversity
|
F
|
菌群丰度展示
|
菌群组成
|
不需要计算
|
heatmap.2 / superheat
|
实际上,R语言的工具太多了,我只是罗列出了基本的几种。有一些工具是集成的,比heatmap.2 和 superheat 实际上整合了hclust,可以直接计算聚类。
还有一些所谓的“高大上”的图,比如Liu等发表的糖尿病人的肠道菌群和代谢组(Nature Medicine 2017)。
这张图怎么做出来的?
肥胖人群富集的菌群在右边,健康人群富集的菌群在左边,红色连线代表负相关,蓝色为正相关,点的颜色代表物种种类,点的大小代表菌群的平均丰度。
看起来复杂,实际需要的数据比刚才的热图简单多了,只有一张表而已,用R语言3行代码就可以做出来:
抬头
|
名称
|
解释
|
Source node
|
Bacteria1
|
源点的名称
|
Target node
|
Bacteria2
|
目标点的名称
|
Interaction
|
positve/negative
|
连线的属性
|
Source node atrribute
|
GenusA
|
源点的特征(比如来自哪个菌群)
|
Target node atrribute
|
GenusB
|
目标点的特征(比如来自哪个菌群)
|
Source node atrribute 1
|
mean(Bacteria1)
|
源点的特征(比如其平均丰度)
|
Target node atrribute 1
|
mean(Bacteria2)
|
目标点的特征(比如其平均丰度)
|