查看原文
其他

[ggtree] 使用自己的数据来给进化树上色

2017-04-17 Y叔 biobabble

这是个老问题了,在google group被问过(https://groups.google.com/forum/#!topic/bioc-ggtree/4GgivKqVjB8),在github上也被问过(https://github.com/GuangchuangYu/ggtree/issues/76, https://github.com/GuangchuangYu/ggtree/issues/105)如此反复提问的问题,我必然是放在FAQ上的,然而很多人都不看,还继续来问,于是写个博客文,再有人来问,我就甩来他们博客,自己看去。


给进化树上色对于ggtree来讲非常简单,不外乎是aes(color=VAR)这样的语法,不管是连续型变量还是离散性变量都是通吃的。


这里的问题是使用用户自己的数据,这当然也没问题,ggtree提供了一个操作符%<+%给用户强插数据!强插了之后,不就又可以aes(color=VAR)了么!



这个问题本身解决方案是有两种的,一种是把用户数据存入到ggtree支持的进化树对象中,然后直接就可以用ggtree来上色了,另一种方案就是上面提到的强插数据。


首先来看一下第一种,这里使用phylobase定义的phylo4d,这个可以拿来存一些数据,而这个对象是ggtree支持的,ggtree几乎支持了其它所有R包定义的进化树类(class),是R社区里万能的进化树可视化软件哟。


require(ggtree) require(phylobase) set.seed(123)tr = rtree(30)g1 = as(tr, 'phylo4')d = data.frame(color=sample(c('red', 'blue', 'green'), 30, replace=T)) rownames(d) = tr$tip.labelg2 = phylo4d(g1, d)rNodeData <- data.frame(randomTrait = rnorm(nNodes(g1)), color = sample(c('purple', 'yellow', 'black'), nNodes(g1), replace=T), row.names = nodeId(g1, "internal")) nodeData(g2) <- rNodeData


存了这对象之后,一条语句就上色了:

ggtree(g2, aes(color=I(color)))




另一种方法就是纯粹使用ggtree的%<+%操作符,还是使用上面的随机树,强插数据,然后就可以使用数据中的变量来重新上色


d = data.frame(node=1:59, color=sample(c('red', 'blue', 'green'), 59, replace=T)) ggtree(tr) %<+% d + aes(color=I(color))



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存