简介
三元图(Ternary plot)1是描述三个变量之和为常数的质心图,其核心原理是:
等边三角形内任意一点到三角形三边的距离之和等于其中一边上的高(常数);
过等边三角形内任意一点分别向三条边作平行线,按顺时针方向或逆时针方向读取平行线在各边所截取之三条线段,三条线段之和等于该等边三角形任一边之长(常数)。
在微生物组组领域,我们主要利用的是基于相位网格的三元图,其特点是每一种成分在相应等边三角形的顶点的比例为100%,在其对面的线为0%,将零点线和顶点按比例划分,用以估计各成分的含量。如图1:y对面的底线代表落在底线上的所有点在y中占比为0,随着平行线逐渐靠近顶点,落在相应平行线上的点在y中的占比越来越高。
图1. 在y组中的占比逐渐增长
在解读三元图时,我们可以通过点的位置快速获得其在三个分组中的相对比例信息:目标点越靠近一角的顶点,说明他在相应的分组中比例越高;反之其相对比例就越低。根据图1,经过点的平行线在等边三角形两边的截距代表该点在对应顶点分组的占比,因此可以得出该点的在三个分组中的占比情况。如图2:过绿色点分别向三条边做平行线,然后按逆时针方向依次读取平行线在三条边的截距约为(0.33, 0.33, 0.33),因此该点在x, y, z 三个组分中的占比为0.33, 0.33, 0.33;依此原则可得出,红点占比为0.1,0.2,0.7;蓝点占比为0.2,0.7,0.1;该结果跟我们的作图代码是相符的。
data <- data.frame( x = c(0.33, 1, 2),
y = c(0.33, 2, 7),
z = c(0.33, 7, 1))
ggtern(data, aes(x = x, y = y, z = z)) +
geom_point(size = 3, alpha = 0.5, color = c("green", "red", 'navy')) +
geom_mask() +
annotate(geom = 'text',
x = c(0.33, 1, 2),
y = c(0.33, 2, 7),
z = c(0.33, 7, 1),
vjust = c(1.5, 1.5, 1.5),
angle = c(0, 30, 60),
label = c("(0.33, 0.33, 0.33)", "(0.1, 0.2, 0.7)", "(0.2, 0.7, 0.1)" ),
color = c("green", "red", 'navy')) +
theme_rgbw() + geom_crosshair_tern(size = 1)
图2. 各点在x, y , z 中的占比
在微生物多样性实际分析中,由于OUTs数目繁多,我们并不需要获得如此精确的占比情况。一般来说,三元图不同的点代表不同的OTUs(其他分类水平),点的大小代表该OTUs的平均丰度(一般需要log2, log10等转换)。不仅如此,还可以对OTUs在各微环境中的丰度数据进行统计检验后,得出各OTU分别在哪种微环境中显著富集,此时三元图不仅表现出OTUs或者物种在微环境中的相对比例,还包含显著性统计结果,它打破了火山图或韦恩图两两比较的结果,总共展示了6次两两比较的结果,即每个组的富集的情况是相对于其他两组的。
实例解读
例1. 不同区域的分布差异2
图3. 三元图展示OTUs的k空间特异性(Kumar, Manoj et al., 2017)
图片描述:
三元图展示不同区域(Bulk soil, Rhizosphere soil, Endosphere)的样本的群落结构在门水平上的差异情况,每个圆点代表一个OTU,OTU的大小、颜色和位置分别代表其相对丰度、菌门水平名称和分组情况。
Distribution of OTUs and phyla across different compartments. (A) Ternary plot of all OTUs plotted based on the compartment specificity. Each circle represents one OTU. The size, color and position of each OTU represents it relative abundance, bacterial phyla and affiliation of the OTU with different compartments, respectively.
图注描述注意事项:
总述图表展示的信息:三元图展示OTUs的空间特异性;
分条叙述图片中各元素代表什么:每个圆点代表一个OTU,OTU的大小、颜色和位置分别代表其相对丰度、菌门水平名称和分组情况。
文中的图片解读:
Bacterial community structures were clearly different in the different compartments at the phylum level.These differences were mainly driven by strong relative enrichment of Firmicutes in the endosphere-derived sequence data sets, compared to their very low abundances in the bulk and rhizosphere soils. The relative abundances of Proteobacteria and Bacteroidetes increased progressively from bulk to rhizosphere soil to the endosphere, with a concomitant decrease in those of candidate division AD3, Gemmatimonadetes and Chloroflexi, which collectively constituted <4% of endosphere communities.
主要描述了比较突出的情况,如丰度较高、规律性变化或明显聚集在某区域的属。
例2. 不同区域的分布差异3
图4. 三元图展示不同取样区域中特异富集的OTUs Rafal Zgadzaj et al., 2016)
图片描述:
- 最上方的“Wild-type”和“Mutants”指明材料类型
- 三个顶点分别为三个区域,并在括号中指出显著富集的OUT数量
- 点的大小代表三组样品的平均相对丰度
- 通过颜色指示显著富集情况:Soil = 土色, rhizosphere = 橘黄色,Root = 绿色,灰色 = 两两比较中未全部显著富集的(均未富集,只相对其中一个分组富集)。
Ternary plots depicting compartment RA of all OTUs (>5 ‰) for WT samples (A; WT; n = 73) and mutant samples (B; nfr5-2, nfr5-3, nin-2, and lhk1-1; n = 118) across three soil batches (CAS8–CAS10). Each point corresponds to an OTU. Its position represents its RA with respect to each compartment, and its size represents the average across all three compartments. Colored circles represent OTUs enriched in one compartment compared with the others (green in root, orange in rhizosphere, and brown in root samples). Aggregated RAs of each group of enriched OTUs (root-, rhizosphere- and soil-enriched OTUs) in each compartment for the WT samples (C; WT; n = 73) and mutant samples (D; nfr5-2, nfr5-3, nin-2, lhk1-1; n = 118) are shown. In each compartment, the difference from 100% RA is explained by OTUs that are not significantly enriched in a specific compartment.
总结:
该图在例1的基础上添加的显著性差异比较的结果,包含了6次两两比较和三次韦恩图比较的结果,信息高度概括。同时,作者还加入了相对丰度的箱式图强化视觉信息输出;此外,通过与B图的横向比较相同的色系,明显的分布差异,一目了然。
绘图实战
由于前期数据处理是三元图主要的难点,所以在这里将数据处理和可视化分开,使用时可以随时检查bug位置,便于使用。
环境设置
本教程需要在R语言环境下运行,推荐在RStudio界面中学习。目前测试版本为:Windows 7环境,R 3.6.3和 RStudio 1.2.5033。理论上Mac、Linux系统,以及R或RStudio的更新版本是兼容的,但并没有广泛测试,有问题欢迎自行解决并在群在与同行分享经验。
按需求安装,没必要每次都运行该安装代码。
if (!requireNamespace("tidyverse", quietly = TRUE))
install.packages("tidyverse")
if (!requireNamespace("ggtern", quietly = TRUE))
install.packages("ggtern")
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
if (!requireNamespace("edgeR", quietly = TRUE))
BiocManager::install("edgeR")
数据处理
otu_table数据源:MicrobiomeStatPlot项目中的示例数据。
函数data_clean参数介绍:
- otu: otu_table
- design: 实验设计信息,样品信息的列名设置为samples,分组信息列名设置为group
- type: otu_table 类型;如果是绝对丰度,一定要注明。
- threshold: 相对丰度阈值,希望丢弃(获取)的相对丰度大小
- times: 点的倍数变化,主要跟可视化有关,如果结果图中的legend全是小数,可以通过倍数变化将其转变为正数,也可以在可视化时自己调整,不影响其传输的丰度相对大小信息。
otu <- read.delim("otutab.txt", header = T, row.names = 1)
design <- data.frame(
samples = colnames(otu),
group = rep(c("KO", "WT", "OE" ),each = 6))
otu_tern <- data_clean(otu, "absolute", times = 100, design = design)
ggtern可视化
ggtern 是Nicholas Hamilton开发的,用于创建三元图的ggplot2的扩展包,详细参数和用法见官方说明文档。
library(ggtern)
p <- ggtern(data = otu_tern,
aes(x = KO, y = OE, z = WT)) +
geom_mask() +
geom_point(aes(size = size),
alpha = 0.8, show.legend = TRUE) +
scale_size(range = c(0, 6)) +
# set legend
guides(colour = "none") +
theme_bw() +
theme(axis.text = element_blank(),
axis.ticks = element_blank())
p
图5. 三元图展示OTUs的实验分组特异性
图片描述:
三元图展示不同处理组(KO, OE, WT)的样本的群落结构在OTUs上的丰度差异情况,每个圆点代表一个OTU,OTU的大小和位置分别代表其相对丰度和分组情况。
图注描述注意事项:
由于该图中并未全部展示所有OTUs,所以在描述的时候,最好对数据筛选的参数进行描述:
- 相对丰度阈值
- 点大小对应的平均相对丰度的倍数变化
从图中可以看到KO(基因敲除,knock-out)组与OE(过表达,over-expression)和WT(野生型,wild-type)组存在丰度差异,即基因的有无可对微生物群落的丰富度引起变化。
对部分OTUs着色
图5能够展示的信息和按top丰度着色后的可视化方案是一致的,但叙述时可以像图3一样着重介绍突出情况,比如丰度较高的OTUs有那些,富集情况很特殊的有哪些。
函数sub_OTU参数介绍:
- data: otu_table
- rank: 希望进行着色的丰度排名,推荐10个。如果超过10个,则需要自己制定配色方案。
plot_data <- top_OTUs(otu_tern, rank = 10)
# 配色方案
platte <- c('#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99',
'#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a')
p <- ggtern(data = otu_tern,
aes(x = KO, y = OE, z = WT)) +
geom_mask() + # 可将超出边界的点正常显示出来
geom_point(data = plot_data[[2]], aes(size = size), color = "grey",
alpha = 0.8, show.legend = FALSE) +
geom_point(data = plot_data[[1]], aes(size = size, color = OTUs),
show.legend = TRUE) +
scale_colour_manual(values = platte) +
scale_size(range = c(0, 6)) +
# legend
guides(size = "none") +
theme_bw() +
theme(axis.text = element_blank(),
axis.ticks = element_blank())
p
图6. 三元图展示OTUs的实验分组特异性
图片描述:
三元图展示不同处理组(KO, OE, WT)的样本的群落结构在OTUs上的丰度差异情况,每个圆点代表一个OTU,OTU的大小、颜色和位置分别代表其相对丰度、OUTs名称和分组情况。 值得注意的是,红色原点所代表的ASV_5在KO组中丰度几乎为0,但在WT和OE均有相对较高的丰度。
富集显著性分析
除了上面直接展示OTUs在不同分组中的丰度富集情况,还可以通过显著性富集分析,获得在不同分组中显著富集的OTUs,最后进行可视化(例2)。
enrich_index <- enrich_data(otu, design, group, p.value = 0.5)
plot_data <- merge(otu_tern, enrich_index, by = "OTUs", all.x = TRUE)
p <- ggtern(data = plot_data,
aes(x = KO, y = OE, z = WT)) +
geom_mask() + # 可将超出边界的点正常显示出来
geom_point(aes(size = size, color = enrich),
alpha = 0.8) +
guides(size = "none") +
theme_bw() +
theme(axis.text = element_blank(),
axis.ticks = element_blank())
p
图7. 三元图展示富集OTUs
图片描述:
除了图6中的信息外,该图还展示了在KO, OE, WT三个分组中,分别相对于另外两个分组显著性富集的OTUs。
图注描述注意事项:
由于该图中并未全部展示所有OTUs,所以在描述的时候,最好对数据统计分析过程的参数进行描述:
- 相对丰度阈值
- 点大小对应的平均相对丰度的倍数变化
- adjust.method
- p.value
Reference
1. wikipedia. wikipedia (2020).
2. Kumar, M. et al. Plants assemble species specific bacterial communities from common core taxa in three arcto-alpine climate zones. Frontiers in Microbiology 8, (2017).
3. Zgadzaj, R. et al. Root nodule symbiosis in lotus japonicus drives the establishment of distinctive rhizosphere, root, and nodule bacterial communities. Proc Natl Acad Sci U S A 113, E7996–E8005 (2016).