我使用Bioconductor的ggtree
包来绘制两个系统发育树。它的工作原理与ggplot2类似,我想修改提示标签的美学,以匹配外部CSV文件设置的类。
我有一个multiPhylo对象,它包含相同50个基因的两个不同的聚类(我们假设这个例子只有6个)。当我评估multitree[[1]]$tip.label
和multitree[[2]]$tip.label
时,他们都以相同的顺序给我相同的列表,所以我知道虽然图表的显示方式不同,但基因仍以相同的顺序存储。
library(ggtree)
library(ape)
mat <- as.dist(matrix(data = rexp(200, rate = 10), nrow = 6, ncol = 6))
nj.tree <- nj(mat) ### Package ape
hclust.tree <- as.phylo(hclust(mat))
multitree <- c(nj.tree, hclust.tree)
我想绘制这些树,然后根据现有文献中的5个类别(A,B,C,D和E)中的哪个类别用外部数据注释它们。
write.csv(multitree[[1]]$tip.label, "Genes.csv")
我使用此命令以正确的顺序创建每个基因的CSV文件(不确定是否相关)。然后,我在与每个基因相邻的列中手动输入相应的类别字母。它看起来像这样:
Gene Class
1 A
2 A
3 D
4 C
5 B
6 E
等等。
我想在树上标注提示标签颜色,以对应我外部CSV表中定义的颜色。我知道它看起来像geom_tiplab(aes(color=something something something))
,但我不知道如何制作它以便它读取我的CSV中的数据而不是multitree
中的数据。这是我的ggtree命令的样子
myTree <- ggtree(multitree[[i]], aes(x, y)) +
ggtitle(names(multitree)[i]) +
geom_tiplab() + ### What I want to annotate with color
theme_tree2() +
coord_fixed(ratio = 0.5)
print(myTree) ###Occurs within a for loop, forces ggplot output to display
答案 0 :(得分:1)
为表格中的班级名称创建颜色矢量。
g <- read.csv("Genes.csv")
cols <- rainbow(nlevels(g$Class))
# Function to identify class color for a certain gene
findCol <- function(x){
col <- switch(as.character(x), A=cols[1], B=cols[2], C=cols[3], D=cols[4], E=cols[5])
return(col)
}
col.vect <- sapply(g$Class, findCol)
在geom_tiplab()
功能中使用此向量。