【问题标题】:Find tips in R tree newick format查找 R 树 newick 格式的提示
【发布时间】:2015-04-18 09:46:22
【问题描述】:

我使用 ape (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));

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

【问题讨论】:

  • 你能添加一张你的树的截图吗?
  • 它们看起来像这样 dropbox.com/s/uis0worcafcwluw/tree_pos.pdf?dl=0 只是忽略提示上的颜色....
  • 考虑张贴small reproducible example any 将答案应用于您的更大案例。
  • @lukeA 做到了..看看
  • 试试tree <- ape::read.tree(file = textConnection("((((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));")); tree$tip.label

标签: r tree phylogeny


【解决方案1】:

要让 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)

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

【讨论】:

    【解决方案2】:

    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")
    

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 2015-03-29
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多