27

次の要件を持つネットワーク図に使用するオープンソースのJavaグラフ描画フレームワークはどれですか?グラフのノード数は1000未満になります。

1)平行なエッジがある
2)単一のグラフ内に有向および無向のエッジ
3)画像で表されるノード
4)ノードとエッジとのユーザーインタラクション
5)ノードとエッジの動的な追加/削除
6)ノードとエッジの複数のラベル付けラベル付けは、ユーザーがオフ/オンにすることができます。(レイヤーでの描画やレイヤーのオフ/オンなど)
7)スター、リング、メッシュトポロジを表示するためのさまざまなレイアウトアルゴリズム

JUNGとPrefuseを評価しました。これは、私の要件ごとに私が見つけたものです。

1)JUNGがサポートしている間、Prefuseは平行エッジを表示できません。プリフューズコードを操作して、平行なエッジを表示できますか?これには基本的なデータレベルの変更が含まれるため、通常のカスタマイズされたレンダリングの変更よりも難しいと思います。

2)prefuseとJUNGの両方で、結合されたグラフ(有向エッジと無向エッジの両方)への参照が見つかりませんでした。誰かが他のことを知っていますか?

3)これはPrefuseとJUNGの両方で簡単に思えます

4)ここでも、prefuseとJUNGの両方がユーザーインタラクションのサポートを提供します。

5)prefuseとJUNGの両方がそれをサポートします。グラフを再描画している間、各フレームワークはどのように機能しますか?別の投稿で、動的更新ではプリヒューズがうまく機能しないことがわかりました(Prefuse Toolkit:ノードとエッジを動的に追加します

6)これは、グラフを変更して再描画することになります。したがって、質問は5)と同じになります。

7)JUNGとprefuseの両方に複数のレイアウトアルゴリズムがあります。しかし、JUNGとPrefuseの両方でFruchtermanReingoldLayoutを使用して同じデータセットを表示しようとすると、異なる表示が表示されます。なぜアイデアはありますか?PrefuseのレイアウトアルゴリズムのほとんどはJUNGの実装に基づいていますが、どういうわけか、PrefuseのレイアウトアルゴリズムはJUNGよりも優れたレイアウトを表示しているようです(レンダリングも優れていると思います)。ForceDirectedLayout / FruchtermanReingoldLayoutやCircleLayoutなどのプリフューズレイアウトは、スター、サークル、メッシュトポロジに直接マップされます。

これらの要件以外では、prefuseは式とクエリ言語を適切にサポートしていますが、JUNGとは異なり積極的に開発されていないようです。どちらがより良い視覚化を持っていますか?どれが適切であり、どのように欠点を克服するかについての提案はありますか?

私が使用できる他のフレームワークはありますか?

4

5 に答える 5

5

私はJUNGのクリエーター兼メンテナーの一人ですので、以下の回答を念頭に置いてください。

最初に、しかし、私はPrefuseの作者が友人の友人であり(そしてそうです、私たちは会いました)、彼は素晴らしい仕事をしたと言わなければなりません。Prefuseの経験はありませんが、Prefuseを使用して作成された美しい視覚化をいくつか見ました。

JUNGに対するこれらの質問に対する回答は次のとおりです。それらのいくつか((1)、(2)、(4)は次のように示されPluggableRendererDemoます:

  1. サポートされています(パフォーマンス上の理由から、すべてが並列エッジをサポートしているわけではなく、適切なデータモデルが必要です)
  2. サポートされています(ここでも、適切なデータモデルが必要です)
  3. サポートされています(を参照ImageShaperDemo
  4. サポートされています(ほとんどのデモ)
  5. サポートされています(を参照GraphEditorDemo
  6. 直接サポートされていませんが、ラベルを動的に変更し、HTMLを使用して複雑なラベルをレンダリングすることはできます。
  7. JUNGのレイアウトアルゴリズムは、一般的なネットワーク向けです(ツリーなどのいくつかの例外を除く)。ただし、確かに独自のレイアウトアルゴリズムを構築することはできますが、多くの人がそうしています。

お役に立てれば。

于 2011-03-18T18:16:24.603 に答える
3

数年前 (2007 年?)、私は prefuse を使用して通話データ レコードを視覚化しました。prefuse、jung、jgraph、その他いくつかを検討し、prefuse を選択しました。最初は prefuse に頭を悩ませるのは少し難しいですが、慣れると (拡張するのが) とても簡単で楽しく使用できます。JUNGにも同じことが言えると思いますが、試したことはありません。

1) prefuse では、平行なエッジを描画するための独自のカスタム レンダラーを簡単に追加できます。デフォルトの EdgeRenderer をサブクラス化し、render() メソッドをオーバーライドできます。「基本的なデータ レベルの変更」は必要ありません。MVC のようなものと考えたい場合、これはすべてビュー パーツにあります。

2) これは実際にはまったく問題ではありません。これを行うには複数の方法があります: 1) 2 つのレンダラーを使用できます。1 つは有向エッジを描画するためのもので、もう 1 つは無向エッジを描画するためのもので、問題なく動作し、エッジを適切にグループ化します。2) エッジが方向付けられているかどうかを示すフラグを設定し (prefuse speak のバッキング テーブル タプルにブール列を追加)、そのフラグに従って EdgeRender で矢印描画部分を適宜スキップします。

3) これはとても簡単です

4) 同上

5) 最後の prefuse リリースは、「prefuse ベータ リリース 2007.10.21」です。その前のものを使用しましたが、ノードを動的に追加または削除するときに競合状態が発生する可能性がありました.いくつかの同期キーワードが欠落していたと思います. ノードを追加または削除するときに、すべてのアニメーションとアクション (色、サイズ、レイアウト) を確実に停止することで解決しました。また、Lucene インデックスも更新することを忘れないでください (組み込みの lucene 検索エンジンを使用する場合)。 )。最新のものはこのレースの問題を解決するはずですが、私はそれを試す機会がありませんでした.

6)「複数のラベル付け」について言及したので、これは「グラフを変更して再描画する」という問題ではないと思います-関連するラベルのみを描画するようにラベル/エッジレンダラーをカスタマイズするだけの問題であるため、これは実際には大きな問題ではありません. また、これは5とはまったく関係がないと思います。

7) prefuse と JUNG の FruchtermanReingoldLayout のレンダリングが異なることに驚きはありません - 各実装が計算を開始する開始ノードに影響を与える可能性のあるいくつかの要因があるため、この問題についてはあまり心配しません。prefuse に組み込まれているさまざまなグラフ レイアウト アルゴリズムを試すのは非常に簡単です。スター レイアウトについては、RadialLayout と BalloonTreeLayout を確認してください。ForceDirectedLayout では、ノードの配置を「安定」させるために、かなりの回数の反復が必要です。これらの反復は表示する必要がないので、バックグラウンドで実行して最終結果をレンダリングできることに注意してください。

私はJUNGを使ったことがないので、あまりコメントできません。

prefuse での私の経験に基づいて、非常によく考え抜かれた (IMHO) 設計とコンポーネント間の責任の分離により、それを強くお勧めします。Jeffrey Heer (prefuse の著者) はそこで本当に良い仕事をしました。

prefuse を使用する場合に注意すべきこと (これらは、prefuse を使用するときに鮮明に覚えている 2 つの「親指」です):

1) ズームアウトすると、ノード ラベルが適切にズームアウトされず、ノードのバウンディング ボックスをオーバーフローし、ノードが移動したときにフォント描画アーティファクトが残るというバグがあります。これは、レンダラーがノードのバウンディング内のもののみをクリアして再描画するためです。箱。IIRC これは、AWT フォント メトリック自体のバグが原因です。回避策は、ラベルとノード境界ボックスの間に十分なマージンを残すことです。

2) 組み込みのレイアウトを拡張するとき、アクセスしたいスーパークラスのメンバーに保護された属性ではなくプライベート属性が与えられている場合、1 つまたは 2 つの「スコープの問題」が発生する可能性があるため、解決策は次のいずれかを変更することですライブラリ自体を削除するか、継承せずに新しいクラスを作成します (これは少し面倒です!)。他のJavaライブラリについても同じことが言えると思います。誰もが後知恵の恩恵を受けているわけではありませんか?:)

約 1 か月前 (私がこれを書いている時点) にこの質問をしたので、あなたの決定が何であり、実装を進めた場合にどのようになったかを知りたいです。

于 2011-02-10T04:32:19.973 に答える
2

あなたが jung と prefuse を指定したことは知っていますが... TomSawyer と yFiles の両方で良い経験をしました。あなたが提案した要件リストは、これら 2 つにとって非常に基本的なものであり、さらに多くのことをサポートしています。

走った。

于 2011-01-12T16:07:11.730 に答える
0

JGraphも評価することをお勧めします。

于 2011-01-13T06:57:29.587 に答える