web-dev-qa-db-ja.com

pythonのインタラクティブなグラフ作成ライブラリはありますか

Python用のインタラクティブなグラフ作成ライブラリを探しています。

graph 」とは、一連の頂点(x-y軸上の値のプロットやピクセルのグリッドではない)で接続された一連のノードを意味します。

「インタラクティブ」とは、ノードをドラッグアンドドロップできることを意味し、ノード/頂点をクリックして、ライブラリがノード/頂点をコールバックに渡して、ノード/ノードを追加/削除できるようにする必要があります頂点または表示情報(データセットが大きすぎる/複雑であるため、起動時に完全なグラフを読み込むことができません。代わりに、ユーザー入力に応じて必要なデータスライスのみを読み込みます)。

Pythonとは、プログラミング言語 Python を意味し、グラフ作成ライブラリにはCPythonバインディングが必要です。 Python 2.7とPython 3.1がありますが、必要に応じて2.6にダウングレードできます。この言語の要件は、使用しているデータセットにPythonバインディングのみがあるためです。

グラフライブラリは 有向グラフ をサポートし、ノードを自動的にレイアウトできる必要があります。ノードにラベルを付ける必要があります。

できれば、レイアウトアルゴリズムは、隣接するノードを互いに近くに配置する必要があります。私の4歳のラップトップでは、100〜1000ノードと約300〜4000の頂点を合理的に処理できるはずです(通常、約100ノードから始めますが、ユーザー入力に応じて数が増える可能性があります)。できれば、依存関係が多すぎないライブラリにする必要があります(おそらくGnomeを除く)。オープンソースが推奨されます。

Tkinter Canvasを使用してプログラムの簡単なプロトタイプをすでに作成しましたが、プログラムを拡張するには、より本格的なグラフ作成ライブラリが必要です。 graphvizとmatplotlibを見てきましたが、どうやらそれらは静的なグラフを操作するためだけのものであり、インタラクティブな操作を行うためにかなりの量の作業が必要と思われます。また、SVGファイルにグラフを生成し、Inkscapeを使用してグラフを表示しようとしましたが、速度が遅く、メモリを大量に消費します。頂点の数が非常に多いため、混乱します。

57
Lie Ryan

Nodeboxはあなたが望むもののように見えます:

http://nodebox.net/code/index.php/GraphMac OSX

http://www.cityinabottle.org/nodebox/Windows(OpenGLを使用)

Nodebox screenshot

グラフオブジェクトには、マウス操作の機能もあり、graph.eventsオブジェクト。次のプロパティがあります。

  • graph.events.hoveredNoneまたはマウスがホバーするノード。
  • graph.events.pressedNoneまたはマウスが押しているノード。
  • graph.events.draggedNoneまたはドラッグされているノード。
  • graph.events.clickedNoneまたは最後にクリックされたノード。
  • graph.events.popupTrueの場合、ホバーされたノード上にポップアップウィンドウを表示します。

また、Gephiにまたがって来ました。あなたが望む機能を備えているようです。

http://gephi.org/WindowsLinuxおよびMac OSX

Gephiは、あらゆる種類のネットワークと複雑なシステム、動的および階層グラフ向けのインタラクティブな視覚化および探索プラットフォームです。

gephi screenshot

28
Acorn

igraph ライブラリを見ていない場合は、必ず見てください。

これは、大きなグラフやさまざまなレイアウトスタイルを処理できる強力なライブラリです。また、有向グラフ、および features のリストに従って2Dおよび3Dでのインタラクティブおよび非インタラクティブな視覚化にも使用できます。 tutorial もあります。

更新:もう1つの有名なライブラリは NetworkX であり、そのためにPythonパッケージ here 。Acornが推奨するMac/WindowsソフトウェアNodeboxはNetworkXアルゴリズムを使用していることに注意してください。

9
lecodesportif

私は同じ問題を抱えています。最終的には、nodebox openglがトリックを行うようだと思います。次のリンクでグラフライブラリを使用しようとしないでください

http://nodebox.net/code/index.php/Graph

nodebox openglを使用します。動作しません。グラフライブラリはmac OSXノードボックスとのみ互換性があります。ただし、必要ないので大丈夫です。

たとえば、次の質問を参照してください。

ノードボックスopneglのグラフのエッジにラベルを追加する

それは私のために働くサンプルコードを示しています。コードを修正して、ノードをクリックすることでノードを移動できるだけでなく、グラフを修正することもできます。

削除するだけ

label = "Placeholder"

コードから、それは動作します。

編集:

ここに、さらに詳細なコード例をいくつか示します。 Nodebox open GLグラフ、サイズ関数が認識されません。(Ubuntu)

3
patapouf_ai