2016-04-10 12 views
0

私はオブジェクトのように見える樹状突起を持っています。matlabの着色樹状突起オブジェクト

tree.newick = '(A1:7,(B1:5,((G1:3, H1:3)C1:1, D1:4)F1:1)E1:2)O1:0'; 
mytree = phytreeread(tree.newick); 
h = plot(mytree,'Type','square') 

Iはまた、終端ノード、ならびに内部ノードを有する(この例では、simplisityため、私はBioinforamticsツールボックスからphytreereadを使用しました)。 enter image description here

私はそれを自動化するために、

h.BranchLines 

でエッジをリストアップし、

set(h.BranchLines(1),'Color',[1 1 0]) 

とその色を変更することができますが、私は2で、ノードが何であるか、知っておく必要がありますh.BranchLinesの終わり(1)、私はそれを理解することはできません。

基本的に、私はノードとノードB間のエッジを着色するために、関数color_edge(A、B、色)を行った後です。

つまり

、私は与えられたh.BranchLinesため 1)(1)、どのようにいずれかを知りたいのですが - どのように与えられた二つのノードのための2つの終了ノードのID 2)を把握するために、言うA1O1、h.Branchlinesが接続しているのは何ですか?

プロットを再現するコード - あなたは、例えば、関係を抽出するためにgetmatrix機能を使用することができるバイオインフォマティクスのツールボックス

tree.newick = '(A1:7,(B1:5,((G1:3, H1:3)C1:1, D1:4)F1:1)E1:2)O1:0'; 
tree.root = {'O1'}; 
mytree = phytreeread(tree.newick); 
phytreeviewer(mytree) 
h = plot(mytree,'Type','square') 
set(h.BranchLines(1),'Color',[1 1 0]) 
set(h.BranchLines(4),'Color',[0 1 1]) 

答えて

0

を持っている必要がありますによって、明らかに(スパースmatrix内の非ゼロのエントリの順序はBranchLinesに取り扱うラインの順序に対応するが、ケースのように見えるんのでどこにも文書化されていない

>> [matrix, id] = getmatrix(mytree) 

matrix = 

    (9,1)  1 
    (8,2)  1 
    (6,3)  1 
    (6,4)  1 
    (7,5)  1 
    (7,6)  1 
    (8,7)  1 
    (9,8)  1 


id = 

    'A1' 
    'B1' 
    'G1' 
    'H1' 
    'D1' 
    'C1' 
    'F1' 
    'E1' 
    'O1' 

:あなたのケースで建設)。だから第1のハンドルは、idマッピングに従って、ノード9とノード1とを接続する(すなわち、O1A1)。

値がplotgetmatrixのものは組み込み関数ではないので、ソースコードを調べてこの仮定を検証するだけで簡単に読み込むことができます。ソースは\toolbox\bioinfo\bioinfo\@phytree\にあります。

また、チャートにブランチラベルを表示することで、簡単に確認できます。最初の行のために:

h = plot(mytree, 'Type', 'square', 'BranchLabels', true); 
set(h.BranchLines(1), 'Color', 'r') 

enter image description here

最後に、これはあなたがプログラムで、右の順に、それらの非ゼロのノードのインデックスを読むことができる方法です。

[i,j] = ind2sub(size(matrix), find(matrix)) 

i = 
    9 
    8 
    6 
    6 
    7 
    7 
    8 
    9 


j = 
    1 
    2 
    3 
    4 
    5 
    6 
    7 
    8 

P.S.明らかに、将来のリリースで破損しないという保証は全くありません。