web-dev-qa-db-ja.com

graphvizで大きなグラフをレイアウトする

私の娘たちは三目並べに似たゲームを作りました。もちろん、彼らと一緒にプレイしたとき、頭の中で強引に強要し始めました...

だから、昼食時にゲームを「解決」するための短いPythonスクリプトを作成しました。結果をグラフィカルに表示したかったので、すべての合法的な動きのドットファイルを生成しました。

ここにデータを貼り付けました

dotを使用してレンダリングしようとすると、時間がかかり、数時間後に中止します。

neatoまたはsfdpなどを使用してレンダリングすると、数秒以下かかりますが、レイアウトを実際に読み取ることはできません。

sfdp -x -Tpng data.dot > data.png

sfdp

neato -x -Tpng data.dot > data.png

neato

結果の画像が数メガピクセルになるとうれしいです。

このような大きなグラフをレイアウトしてレンダリングするにはどうすればよいですか? Pythonレイアウトを実行できるライブラリもあります。

やや関連するリンク

追加my Python script ゲームを解決してドットファイルを生成する

41
Will

これを試して:

sfdp -x -Goverlap=scale -Tpng data.dot > data.png

-Goverlapはレイアウトを保持しますが、ノードのオーバーラップがなくなるまで均一にスケールアップします。ズームアウトすると、このように見える〜77MBのPNGを取得できました。 enter image description here

44
job

あなたはまだネイトを使用することができますが、.dotファイルのパッティングを変更することができます:[splines = trueoverlap = false]

ファイルは次のようになります。

digraph luffarschack {
    graph [splines=true overlap=false];
    node [shape=none]; 
        ...here your nodes;
        ...here your edges;
}

2行目「グラフ[splines = trueオーバーラップ= false]」を入力するだけで、他のすべてが同じ場合は機能するはずです。

8
DanielBoloc

大きなグラフでデフォルトの-Kneatoのドットが遅すぎる( svg )。使用してしまいました

dot -Ksfdp -ooutput.svg -Tsvg input.dot

ここで、input.dot

digraph {
    graph [overlap=false];
    a -> {b c d e f g}
    b -> {c e g x f}
    ...
}
1
jnnnnn

他の答えに加えて、 Gephi のような他のツールを使用できます。

Gephiは、あらゆる種類のグラフおよびネットワーク向けの主要な視覚化および探索ソフトウェアです。 Gephiはオープンソースで無料です。

Windows、Mac OS X、Linuxで実行されます。

1