web-dev-qa-db-ja.com

グラフ自動レイアウトアルゴリズム

問題を単純化するために、2D平面上にあるノードとエッジを含むグラフがあります。

私ができるようにしたいことは、ボタンをクリックすると、グラフが自動的にきれいに見えるようにレイアウトされるようにすることです。つまり、ノード間のすてきなスペースであるエッジの最小の交差は、グラフのスケール(重み付きエッジ)を表すことさえあります。

これは見栄えの良いグラフとは完全に主観的であることを知っていますが、ホイールを再発明するのではなく、最初からアルゴリズムを知っている人はいますか?

ありがとう。

59
Cheetah

graphviz をご覧になることをお勧めします。 dotプログラムは、グラフの仕様を取得して、ネットワークのイメージをある程度「きれいに」生成できます。そのページの「理論」リンクは、理論的な背景に興味がある場合に関連するリンクを提供します。

19
Noufal Ibrahim

http://graphdrawing.org/ および このチュートリアル 、byRoberto Tamassia、ブラウン大学教授、非常に参考になりました。

私はSpring Embedderのような多くのForce-Directed Techniques(チュートリアルのpp。66-72)が好きです。

隣接する2つのノード間にバネまたはその他の力があると仮定し、自然(シミュレーション)に仕事をさせます:)

74
ypercubeᵀᴹ

また、 JGraph Java(プロジェクトに取り組んでいます)のレイアウトが必要な場合。

4
David

Noufal Ibrahimと言いますが、 graphviz プロジェクトのC APIをより正確に見ることもできます。すべてのノードとエッジを使用してグラフを構築するライブラリ( libgraph.pdf )と、グラフをレイアウトするライブラリ( libgvc.pdf )(それぞれを計算するだけです)ノードの位置)、たとえば、独自のUIで表示できます。

2
jslap

最も人気のあるレイアウトが実際にどのように見えるかについての優れた視覚的ガイド: link に従ってください

1
Diana Jobs