三元图

作者

[编辑] 黄可昕;

[贡献] 郑虎.

三元图是一种用于显示三个变量之间比例关系的图表。这三个变量通常代表某个成分(例如化学组成、物种比例、营养结构等),它们的和为常数,最常见的是1或100%。三元图使用等边三角形来表示这三个变量之间的比例关系,每个点的位置反映这三个变量的相对比例。这类图表常用于观察不同处理组之间成分分布的差异,检查样本是否在某些区域聚集(成分偏好),比较实验处理对成分比例的影响等。

示例

TernaryPlot DEMO1

该图表显示了土壤植物连续体中玉米细菌群落的组成。

环境配置

  • 系统要求: 跨平台(Linux/MacOS/Windows)

  • 编程语言:R

  • 依赖包:ggtern,ggthemes

# 安装包
if (!requireNamespace("ggtern", quietly = TRUE)) {
  install.packages("ggtern", type = "source")
}
if (!requireNamespace("ggthemes", quietly = TRUE)) {
  install.packages("ggthemes")
}

# 加载包
library(ggtern)
library(ggthemes)

数据准备

数据来源于论文[1],以下是数据代码链接https://github.com/PlantNutrition/Liyu

# 读取数据
data <- read.table("https://bizard-1301043367.cos.ap-guangzhou.myqcloud.com/Tern_data.txt", header=T, row.names=1, sep="\t", comment.char = "")
# 查看数据集
head(data[,1:5])
                CK      NPK     NPKM       size  Kingdom
OTU_1     4.58e-04 4.58e-04 0.000534 0.04832414 Bacteria
OTU_10    2.99e-04 2.33e-04 0.000229 0.02537028 Bacteria
OTU_10588 7.93e-05 2.47e-04 0.000171 0.01656730 Bacteria
OTU_10916 1.08e-05 9.01e-06 0.000450 0.01567026 Bacteria
OTU_11360 3.18e-03 3.17e-03 0.002610 0.29890666 Bacteria
OTU_11839 2.22e-04 4.11e-04 0.000253 0.02951640 Bacteria

可视化

1. 基础三元图

# 基础三元图
p1_1 <- ggtern(data=data, aes(x=CK, y=NPK, z=NPKM)) +
  geom_mask() +
  geom_point(aes(size=size,color=Genus),alpha=0.8)
p1_1
TernaryPlotFig1
图 1: 基础三元图

展示了三种施肥处理下木质部汁液中 OTU 的三元图。每个点的大小代表 OTU 的相对丰度。

2. 改变主题

# 改变主题
p2_1 <- ggtern(data=data, aes(x=CK, y=NPK, z=NPKM)) +
  geom_mask() +
  geom_point(aes(size=size,color=Genus),alpha=0.8) +
  theme_tropical()
p2_1
TernaryPlotFig2
图 2: 改变主题
提示

R 语言中的四种不同主题

theme_minimal:

  • 简单的白色背景,保留坐标轴和浅灰色网格线。不添加背景色和边框等不必要的装饰,专注于数据本身。默认情况下,图例背景会被移除,图例标题和标签会直接显示在图表上。

theme_bw:

  • 黑白高对比度主题,白色背景搭配深灰色网格线/边框。网格线更加突出,适合黑白打印或强调结构化布局。比默认主题 theme_grey 更清晰,没有渐变灰色背景。

theme_void:

  • 完全空白背景,移除所有非数据元素,例如坐标轴、网格线、标签、标题等。仅保留点、线和条形等几何对象,适用于高度可定制的设计。

theme_tropical:

  • 非 ggplot2 内置主题需要通过 ggthemes 等扩展包实现。色彩鲜艳,常用明亮的背景,并搭配粉色、蓝色和绿色等对比元素。风格活泼,适合非正式场合。
p2_2 <- ggtern(data=data, aes(x=CK, y=NPK, z=NPKM)) +
  geom_mask() +
  geom_point(aes(size=size,color=Genus),alpha=0.8) +
  theme_bw()
p2_2
TernaryPlotFig3
图 3: 改变主题

3. 美化绘图

p3_1 <- ggtern(data=data, aes(x=CK, y=NPK, z=NPKM)) +
  geom_mask() +
  geom_point(aes(size=size,color=Genus),alpha=0.8)+
  scale_size(range=c(0,10))+
  scale_color_manual(values=c('#E31A1C','#228B22','#1F78B4','#FDB462','#8B658B','#4876FF','#00BFFF','#EE82EE','#8B8682','#CDC9C9'),limits=c('Klebsiella','Pseudomonas','Enterobacteriaceae_unclassified','Rosenbergiella','Oxalobacteraceae_unclassified','Sphingobacterium','Lactococcus','Erwinia','Others','NotSig'))+
  guides(size="none")+theme_bw()+
  theme(axis.text=element_blank(),axis.ticks=element_blank())+
  theme_showarrows()
p3_1
TernaryPlotFig4
图 4: 美化绘图
提示

关键参数:调整参数

  • geom_mask:显示边界点

  • scale_color_manual:填充颜色

  • theme_showarrows:添加箭头

应用场景

TernaryPlotApp1
图 5: 显示细胞亚群的转录组学

三个角代表上皮细胞的三个亚群,分别对应基底细胞、管腔祖细胞(LP)和成熟管腔细胞(ML)。从图中可以看出不同阶段的细胞类型组成和分化情况,以及对应簇的亚群状态。

参考文献

[1] Zhang L, Zhang M, Huang S, Li L, Gao Q, Wang Y, Zhang S, Huang S, Yuan L, Wen Y, Liu K, Yu X, Li D, Zhang L, Xu X, Wei H, He P, Zhou W, Philippot L, Ai C. A highly conserved core bacterial microbiota with nitrogen-fixation capacity inhabits the xylem sap in maize plants. Nat Commun. 2022 Jun 11;13(1):3361. doi: 10.1038/s41467-022-31113-w. PMID: 35688828; PMCID: PMC9187771.

[2] Pal B, Chen Y, Milevskiy MJG, Vaillant F, Prokopuk L, Dawson CA, Capaldo BD, Song X, Jackling F, Timpson P, Lindeman GJ, Smyth GK, Visvader JE. Single cell transcriptome atlas of mouse mammary epithelial cells across development. Breast Cancer Res. 2021 Jun 29;23(1):69. doi: 10.1186/s13058-021-01445-4. PMID: 34187545; PMCID: PMC8243869.

[3] Hamilton, N. E., & Ferry, M. (2018). ggtern: Ternary Diagrams Using ggplot2 [R package]. https://CRAN.R-project.org/package=ggtern

[4] Arnold, J. (2024). ggthemes: Extra Themes, Scales and Geoms for ‘ggplot2’ [R package]. https://CRAN.R-project.org/package=ggthemes