2017-07-28 5 views
1

グラフを表示するためにネットワークライブラリを使って単純なpythonプログラムを作成しました。私は可視化のためにGraphvizを使用しました。ここ私のnetworkxグラフにゼロ度のノードが表示されていません

コードここで

import networkx as nx 

from networkx.drawing.nx_pydot import write_dot 

G2 = nx.read_edgelist("test_input.txt",create_using=nx.DiGraph()) 



write_dot(G2,"test_flow.doc") 
diagram = 'print (os.system("D:/graphviz/bin/dot -o ' + output.svg + ' -Tsvg ' + test_flow.doc + '"))' 

exec(diagram) 

test_input

A 

B C 

B D 

D E 

Output from graphviz

である、私のドットファイルは、ノード "A" が格納されていません。

次数が0のノードは表示されません。誰かが私を助けてくれましたか?

+0

申し訳ありませんでした...ノードAがドットファイルにありますか?あなたはそれを投稿できますか? –

+0

以下のコマンドの出力を以下に示します。 print(G2.nodes()) ['B'、 'D'、 'E'、 'C​​'] グラフ自体がノード「A」を格納していると言っています。それがDotファイルに書き込まれない理由です。 ドットファイル 厳密な有向グラフ "" { D; E; B; C; D - > E; B→D; B→C; } – Athithan

答えて

0

以下は、networkxコードから直接得られたものです。ご覧のように、「path」だけがそのコマンドで読み取ることができます。 2つ未満の「単語」を含むすべての行は無視されます。ソースファイルから

for line in lines: 
    p=line.find(comments) 
    if p>=0: 
     line = line[:p] 
    if not len(line): 
     continue 
    # split line, should have 2 or more 
    s=line.strip().split(delimiter) 
    if len(s)<2: 
     continue 
    u=s.pop(0) 
    v=s.pop(0) 
    d=s 

この機能はparse_edgelistに実際にあります。関数read_edgelistは、私が投稿した関数のラッパーです。

私は最良の方法は手動でファイルを解析し、 "単一の"ノードを取得してグラフに手動で追加することだと思います。

+0

ありがとう、Ricc。今度は、度が「0」のノードが欠落している理由を見つけることができます。 手動で解析するのではなく、入力を変更して 'read_adjlist'を使用しました。この方法で問題が解決しました。あなたのインプット/提案に感謝します。 – Athithan

関連する問題