誰でもinteractiveグラフの視覚化が可能なPythonライブラリを推奨できますか?
具体的には d3.js のようなものが必要ですが、python
の場合、理想的には3Dにもなります。
私が見た:
Matplotlib
プロットのみを行い、それらは2Dのように見えます。ノードを引っ張るなど、d3.js
が提供するような対話性はありませんでした。d3py a pythonモジュールを使用して、d3.jsスクリプトを埋め込むxmlページを生成できます。例えば :
import d3py
import networkx as nx
import logging
logging.basicConfig(level=logging.DEBUG)
G = nx.Graph()
G.add_Edge(1,2)
G.add_Edge(1,3)
G.add_Edge(3,2)
G.add_Edge(3,4)
G.add_Edge(4,2)
# use 'with' if you are writing a script and want to serve this up forever
with d3py.NetworkXFigure(G, width=500, height=500) as p:
p += d3py.ForceLayout()
p.show()
Plotlyは、インタラクティブな2Dおよび3Dグラフをサポートします。グラフはD3.jsでレンダリングされ、 Python API 、 matplotlib 、 ggplot for Python 、 Seaborn 、 prettyplotlib 、および pandas 。トレースのズーム、パン、トグルのオン/オフの切り替え、ホバー上のデータの表示を行うことができます。プロットは、HTML、アプリ、ダッシュボード、およびIPythonノートブックに埋め込むことができます。以下は、対話性を示す 温度グラフ です。その他の例については、 IPython Notebookstutorials のギャラリーを参照してください。
docs は、サポートされているプロットタイプとコードスニペットの例を提供します。
あなたの質問に特化して、NetworkXから インタラクティブプロット を作成することもできます。
Pythonを使用した3Dプロットの場合、同様にインタラクティブな3D散布図、ラインプロット、および表面プロットを作成できます。プロットはWebGLでレンダリングされます。たとえば、英国のスワップレートの a 3Dグラフ を参照してください。
開示:私はPlotlyチームにいます。
ヴィンセントを見たことがありますか? VincentはPythonデータオブジェクトを取得し、それらをVega視覚化文法に変換します。 Vegaは、D3上に構築された高レベルの視覚化ツールです。 D3pyと比較して、vincentレポは最近更新されました。例はすべて静的D3です。
詳細:
グラフはIpythonで表示できます。このコードを追加するだけです
vincent.core.initialize_notebook()
または、VegaオンラインエディタでJSON出力グラフを表示する( http://trifacta.github.io/vega/editor/ )またはPythonで表示できるJSONに出力するサーバーをローカルに。視聴の詳細については、上記のpypiリンクをご覧ください。
いつかはわかりませんが、Pandasパッケージには、ある時点でD3統合が必要です。 http://pandas.pydata.org/developers.html
Bokehは、インタラクティブな視覚化をサポートするPython視覚化ライブラリです。その主要な出力バックエンドはHTML5 Canvasであり、クライアント/サーバーモデルを使用します。
私が使用したレシピの1つ(ここで説明します: GEXFのCo-DirectorネットワークデータファイルとScraperwikiおよびnetworkxを介したOpenCorporates DataのJSON )は、次のように実行されます。
networkxJSONエクスポーター は次の形式を取ります。
from networkx.readwrite import json_graph
import json
print json.dumps(json_graph.node_link_data(G))
または、 ネットワークをエクスポート としてGEXFXMLファイルを作成し、この表現を sigma .js Javascript視覚化ライブラリ。
from xml.etree.cElementTree import tostring
writer=gf.GEXFWriter(encoding='utf-8',prettyprint=True,version='1.1draft')
writer.add_graph(G)
print tostring(writer.xml)
別のオプションは bokeh で、これはバージョン0.3になりました。
python-nvd を確認してください。 nvd3のpythonラッパーです。 d3.pyよりも見栄えがよく、チャートオプションも多くあります。
D3js javascriptビジュアライゼーションとpythonのmatplotlibを組み合わせたmpld3を使用することをお勧めします。
インストールと使用方法は本当にシンプルで、いくつかのクールなプラグインとインタラクティブなものがあります。
次のように、データをシリアル化してからD3.jsで視覚化することもできます。 PythonおよびPandasを使用してD3強制指向ネットワークダイアグラムを作成します。 ( jupyterノートブックも付属しています !)
ここに要点があります。この形式でグラフデータをシリアル化します。
import json
json_data = {
"nodes":[
{"name":"Myriel","group":1},
{"name":"Napoleon","group":1},
{"name":"Mlle.Baptistine","group":1},
{"name":"Mme.Magloire","group":1},
{"name":"CountessdeLo","group":1},
],
"links":[
{"source":1,"target":0,"value":1},
{"source":2,"target":0,"value":8},
{"source":3,"target":0,"value":10},
{"source":3,"target":2,"value":6},
{"source":4,"target":0,"value":1},
{"source":5,"target":0,"value":1},
]
}
filename_out = 'graph_data.json'
json_out = open(filename_out,'w')
json_out.write(json_data)
json_out.close()
次に、d3.jsを使用してデータをロードします。
d3.json("pcap_export.json", drawGraph);
ただし、ルーチンdrawGraph
については、リンクを参照してください。
NetworkXのJavascriptへの興味深い移植版があります。 http://felix-kling.de/JSNetworkX/ を参照してください
見る:
受け入れられた答えは、明らかにpythonバインディングを持つ次のプログラムを示唆しています。 http://ubietylab.net/ubigraph/
編集
NetworkXの双方向性についてはわかりませんが、3Dグラフは間違いなく作成できます。ギャラリーには少なくとも1つの例があります。
http://networkx.lanl.gov/examples/drawing/Edge_colormap.html
「例」の別の例。ただし、これにはMayaviが必要です。
http://networkx.lanl.gov/examples/3d_drawing/mayavi2_spring.html
ここにPythonを使用してD3.jsネットワーク図を自動生成する良い例があります: http://brandonrose.org/ner2sna
クールなことは、自動生成されたHTMLとJSになり、IFrameを使用してインタラクティブなD3チャートをノートブックに埋め込むことができることです。