我想从输入的单倍型数据生成无根的邻居加入树,然后根据变量为树的分支着色。我正在使用包 Ape 和 ggtree。单倍型和协变量(元数据)位于两个具有匹配样本名称的单独文件中。我已经能够生成树木并通过变量为树木的尖端着色,但不能通过树枝。
使用模拟数据 -
# Packages
library('ggplot2')
library('ape')
library('phangorn')
library('dplyr')
library('ggtree')
library('phylobase')
# Generate haplotype dataframe
Sample <- c('Sample_A', 'Sample_B', 'Sample_C', 'Sample_D', 'Sample_E', 'Sample_F')
SNP_A <- c(0, 1, 1, 0, 1, 1)
SNP_B <- c(0, 1, 1, 0, 1, 1)
SNP_C <- c(0, 0, 1, 1, 1, 0)
SNP_D <- c(1, 1, 0, 0, 1, 0)
SNP_E <- c(0, 0, 1, 1, 0, 1)
SNP_F <- c(0, 0, 1, 1, 0, 1)
df = data.frame(Sample, SNP_A, SNP_B, SNP_C, SNP_D, SNP_E, SNP_F, row.names=c(1))
df
# Metadata
Factor_A <- c('a', 'a', 'b', 'c', 'a', 'b')
Factor_B <- c('d', 'e', 'd', 'd', 'e', 'd')
df2 = data.frame(Sample, Factor_A, Factor_B)
df2
# Generate Euclidian pairwise distance matrix
pdist = dist(as.matrix(df), method = "euclidean")
# Turn pairwise distance matrix into phylo via neighbour joining method
phylo_nj <- nj(pdist)
我可以在 Ape 中绘制树:
# Example tree plot using Ape
plot(unroot(phylo_nj),
type="unrooted",
cex=1,
use.edge.length=TRUE,
show.tip.label = TRUE,
lab4ut="axial",
edge.width=1.5)
我可以在 ggtree 中绘制树,通过颜色/形状向尖端添加变量:
# Plotting in ggtree
mytree <- ggtree(phylo_nj, layout="equal_angle", size=0.5, linetype=1)
mytree
# Adding metadata variables to tree plot
mytree2 <- mytree %<+% df2 + geom_tippoint(aes(shape = Factor_A,
colour = Factor_B),
size = 9,
alpha=0.7)
mytree2
但是我无法弄清楚如何在 Ape 或 ggtree 中使分支由变量(而不是尖端)着色。我只想要终端分支的颜色,而不是树的所有线条。我的目标是显示两个(分类)变量 - 一个按分支颜色,一个按尖端的形状(或颜色)。我所追求的粗略版本如下图所示(Factor_A 由尖端形状编码(中性色如图所示),Factor_B 由分支颜色编码。
在此先感谢您的帮助。