R用外部数据注释系统发育树?

时间:2016-05-03 18:53:42

标签: r csv tree phylogeny

我使用Bioconductor的ggtree包来绘制两个系统发育树。它的工作原理与ggplot2类似,我想修改提示标签的美学,以匹配外部CSV文件设置的类。

我有一个multiPhylo对象,它包含相同50个基因的两个不同的聚类(我们假设这个例子只有6个)。当我评估multitree[[1]]$tip.labelmultitree[[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

1 个答案:

答案 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()功能中使用此向量。