2

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

我不认为在 1000 个样本中,它们从 1 到 1000 依次放置在尖端,但是树以某种方式重新排列了它们……所以我需要新的尖端标签序列或其他东西……

树看起来像这样:

![在此处输入图像描述][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));

另外,我怎样才能从中获得一个只有尖端标签的向量?

4

2 回答 2

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)

我发现生成的树是可读的,如果你真的靠近和眯着眼睛。

于 2016-05-10T22:27:54.590 回答
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")
于 2016-05-11T03:59:52.477 回答