查找R tree newick格式的提示

时间:2015-04-18 09:46:22

标签: r tree phylogeny

我用ape(read.tree)将一个Newick树导入到R中。问题是当我绘制树时标签重叠,因为有1000个提示。我不是在这里复制树,因为它是一个很长的表达。有没有办法看到哪个人在树的哪个角落?

我不认为1000个标本中它们按顺序从1到1000顺序放置但是树以某种方式重新排列它们......所以我需要新的尖端标签序列......或者...... p>

树看起来像这样:

![在此处输入图片说明] [1]

只是忽略颜色,我需要能够得到一系列的提示......只考虑一个案例,其中从底部开始的第一个尖端是尖端79,然后尖端高于82,然后是87和所以......

考虑像这样的树

((((penHA34a,penHA34b,penHA32b,penHA32a,penSH30b,penSH30a,penSH28b,penSH28a,penIT13b,penIT13a,penIT12a,firSA26b,firGU7b,firGU8b,firSP18b,firSP20b,firSP36b,firSP39b,penSH31a,penSH31b),(firSP19b,(firSP17b,penIT12b))),firSA24a,firSA24b,firSA25a,firSA26a,firGU7a,firGU8a,firSP17a,firSP18a,firSP19a,firSP20a,firSP36a,firSP39a,(firSA25b,firSP40b),firSP40a,penIT11b,penIT11a),(ovi47a,ovi47b));

另外,如何从中获得仅包含尖端标签的向量?

2 个答案:

答案 0 :(得分:3)

要使1000个分类系统发育的提示可读是很难的,但有三个方面可以帮助1)将树绘制为扇形,2)减小尖端标签的大小,以及3)减少数字边缘。

# Load ape
library(ape)

# Generate 1000 taxa tree
tree <- rcoal(1000)

# Reduce figure margins to 0
par(mar=c(0,0,0,0))

# Plot fan tree with reduced tip label size
plot(tree, type="fan", cex=0.2)

如果你真正接近并眯着眼睛,我发现结果树是可读的。

答案 1 :(得分:0)

data.tree是你的朋友。例如:

newick <- '((((penHA34a,penHA34b,penHA32b,penHA32a,penSH30b,penSH30a,penSH28b,penSH28a,penIT13b,penIT13a,penIT12a,firSA26b,firGU7b,firGU8b,firSP18b,firSP20b,firSP36b,firSP39b,penSH31a,penSH31b),(firSP19b,(firSP17b,penIT12b))),firSA24a,firSA24b,firSA25a,firSA26a,firGU7a,firGU8a,firSP17a,firSP18a,firSP19a,firSP20a,firSP36a,firSP39a,(firSA25b,firSP40b),firSP40a,penIT11b,penIT11a),(ovi47a,ovi47b));'
library(data.tree)
library(ape)
phylo <- read.tree(text = newick)
tree <- as.Node(phylo)

#find a specific individual:
tree$FindNode('firSA24b')$path

这会给你:

[1] "43/44/firSA24b"

您可以打印整个树或将其输出到文件以查找特定节点:

print(tree)
#print a sub-tree
tree$FindNode('45')
#print only part of the tree:
print(tree, pruneMethod = "dist", limit = 25)
#slightly more sophisticated:
print(tree, pruneFun = function(node) !node$isLeaf || node$position <= 5)
#or:
print(tree, pruneFun = function(node) !node$isLeaf || substr(node$name, 1, 4) == 'firS')

最后一句话输出:

                      levelName
1  43                          
2   ¦--44                      
3   ¦   ¦--45                  
4   ¦   ¦   ¦--46              
5   ¦   ¦   ¦   ¦--firSA26b    
6   ¦   ¦   ¦   ¦--firSP18b    
7   ¦   ¦   ¦   ¦--firSP20b    
8   ¦   ¦   ¦   ¦--firSP36b    
9   ¦   ¦   ¦   °--firSP39b    
10  ¦   ¦   °--47              
11  ¦   ¦       ¦--firSP19b    
12  ¦   ¦       °--48          
13  ¦   ¦           °--firSP17b
14  ¦   ¦--firSA24a            
15  ¦   ¦--firSA24b            
16  ¦   ¦--firSA25a            
17  ¦   ¦--firSA26a            
18  ¦   ¦--firSP17a            
19  ¦   ¦--firSP18a            
20  ¦   ¦--firSP19a            
21  ¦   ¦--firSP20a            
22  ¦   ¦--firSP36a            
23  ¦   ¦--firSP39a            
24  ¦   ¦--49                  
25  ¦   ¦   ¦--firSA25b        
26  ¦   ¦   °--firSP40b        
27  ¦   °--firSP40a            
28  °--50    

查找整棵树的提示也很简单:

Get(tree$leaves, "name")

这将产生:

  penHA34a   penHA34b   penHA32b   penHA32a   penSH30b   penSH30a   penSH28b   penSH28a   penIT13b   penIT13a   penIT12a   firSA26b    firGU7b 
"penHA34a" "penHA34b" "penHA32b" "penHA32a" "penSH30b" "penSH30a" "penSH28b" "penSH28a" "penIT13b" "penIT13a" "penIT12a" "firSA26b"  "firGU7b" 
   firGU8b   firSP18b   firSP20b   firSP36b   firSP39b   penSH31a   penSH31b   firSP19b   firSP17b   penIT12b   firSA24a   firSA24b   firSA25a 
 "firGU8b" "firSP18b" "firSP20b" "firSP36b" "firSP39b" "penSH31a" "penSH31b" "firSP19b" "firSP17b" "penIT12b" "firSA24a" "firSA24b" "firSA25a" 
  firSA26a    firGU7a    firGU8a   firSP17a   firSP18a   firSP19a   firSP20a   firSP36a   firSP39a   firSA25b   firSP40b   firSP40a   penIT11b 
"firSA26a"  "firGU7a"  "firGU8a" "firSP17a" "firSP18a" "firSP19a" "firSP20a" "firSP36a" "firSP39a" "firSA25b" "firSP40b" "firSP40a" "penIT11b" 
  penIT11a     ovi47a     ovi47b 
"penIT11a"   "ovi47a"   "ovi47b" 

或者,您可以针对特定路径执行相同的操作:

Get(tree$Climb(44, 45, 47, 48)$children, "name")