2017-09-27 44 views
0

graphvizを使って隣接行列の画像を生成できるかどうかを知りたいと思います。たとえば、このファイルから:graphvizで隣接行列を生成する

digraph { 
    A -> B; 
    B -> C; 
    A -> C; 
    D -> C; 
    E -> C; 
    E -> A; 
} 

結果はこのようなものでなければなりません。それができない場合

enter image description here

、私は使用することができ、他のソフトウェアはありますか?ここで

+0

あなたの質問を他の人が理解できるかどうかは不明です。私はしません。あなたが最終的に得たいもののイメージを置くことを提案する。 – vaettchen

答えて

0

いくつかのアイデアです:

入力Graphvizのコードは(属性または奇妙なノードの自由)比較的きれいであれば、私は、しかし、私ドンgraphvizのは、行列を印刷することを可能にする機能性を認識していませんよ目的の出力を生成するために単純なパーサーを書くのはどうして難しいのか分かりません。次の例のような単純なもの、(パイソン)行うことができます

:一旦全てが行われ

import pprint 
# Example input file with "digraph g {" elided for simplicity: 
s = """A -> B; 
    B -> C; 
    A -> C; 
    D -> C; 
    E -> C; 
    E -> A; """ 
lines = s.split("\n") 
all_edges = [] 
pairs = [] 
for line in lines: 
    edge = line.replace(";", "").replace(" ", "").split("->") 
    if len(edge) == 2: 
     all_edges.append(edge[0]) 
     all_edges.append(edge[1]) 
     pairs.append(edge) 

unique_edges = set(all_edges) 

matrix = {origin: {dest: 0 for dest in all_edges} for origin in all_edges} 
for p in pairs: 
    matrix[p[0]][p[1]] += 1 
pprint.pprint(matrix) 

が、これはあなたが出力するHTMLまたはいずれかにもう少しコードを書くことがあり、出力は次のようになりますあなたの選択した表形式:

""" 
Output: 
{'A': {'A': 0, 'B': 1, 'C': 1, 'D': 0, 'E': 0}, 
'B': {'A': 0, 'B': 0, 'C': 1, 'D': 0, 'E': 0}, 
'C': {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0}, 
'D': {'A': 0, 'B': 0, 'C': 1, 'D': 0, 'E': 0}, 
'E': {'A': 1, 'B': 0, 'C': 1, 'D': 0, 'E': 0}} 
""" 

これは役に立ちます。

+0

答えをありがとう。貼り付けたサンプルのコードは、DOT言語で書かれています。これは、 'cat digraph.dot |'を使って有向グラフ画像を生成するのに使うことができます。 dot -Tpng -o digraph.png'となります。私はDOTで隣接行列を生成する方法を見出していません。私も以前にHTMLを試してみました。それは300 +ノードのグラフで遅れ始めましたが、多分何か間違ったことをしました。 –

関連する問題