回答:
d3.jsスクリプトを埋め込んだxmlページを生成するPythonモジュールd3pyを使用できます。例えば :
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()
with d3py.NetworkXFigure(G, width=500, height=500, host="localhost") as p:
。私はgithub(SHA:4e92a90f4003370bc086e0f57b19fca1bd4e8fba)
Plotlyはインタラクティブな2Dおよび3Dグラフをサポートしています。グラフはD3.jsでレンダリングされているとして作成することができますPythonのAPI、matplotlibの、Python用ggplot、Seaborn、prettyplotlib、そしてパンダ。ズーム、パン、トレースのオン/オフの切り替え、ホバーのデータの確認ができます。プロットは、HTML、アプリ、ダッシュボード、IPython Notebookに埋め込むことができます。以下は、対話性を示す温度グラフです。その他の例については、IPython Notebooks チュートリアルのギャラリーをご覧ください。
ドキュメントはサポートされているプロットタイプとコードスニペットの例を提供します。
特にあなたの質問に、NetworkXからインタラクティブなプロットを作成することもできます。
Pythonを使用した3Dプロットの場合、同様にインタラクティブな3D散布図、ラインプロット、および表面プロットを作成できます。プロットはWebGLでレンダリングされます。たとえば、英国のスワップレートの3Dグラフを参照してください。
情報開示:私はPlotlyチームに所属しています。
ヴィンセントを見たことがありますか?VincentはPythonデータオブジェクトを受け取り、それらをVega視覚化文法に変換します。Vegaは、D3の上に構築された高レベルの視覚化ツールです。D3pyと比較して、vincentリポジトリは最近更新されました。例はすべて静的D3ですが。
より詳しい情報:
グラフはIpythonで表示できます。このコードを追加するだけです
vincent.core.initialize_notebook()
またはJSONに出力して、Vegaオンラインエディター(http://trifacta.github.io/vega/editor/)でJSON出力グラフを表示するか、ローカルのPythonサーバーで表示することができます。表示の詳細については、上のpypiリンクを参照してください。
いつかはわかりませんが、PandasパッケージにはいつかD3統合が必要です。 http://pandas.pydata.org/developers.html
Bokehは、インタラクティブな視覚化をサポートするPython視覚化ライブラリです。その主な出力バックエンドはHTML5 Canvasであり、クライアント/サーバーモデルを使用しています。
私が使用した1つのレシピ(ここで説明:GEXFの共同ディレクターネットワークデータファイルおよびScraperwikiおよびnetworkxを介したOpenCorporatesデータからのJSON)は、次のように実行されます。
networkx JSON輸出国は次の形式をとります。
from networkx.readwrite import json_graph
import json
print json.dumps(json_graph.node_link_data(G))
または、ネットワークをGEXF XMLファイルとしてエクスポートしてから、この表現を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)
別のオプションは、バージョン0.3になったばかりのボケです。
python-nvd3をチェックしてください。それはnvd3のpythonラッパーです。d3.pyよりもクールに見え、さらに多くのグラフオプションがあります。
D3js javascriptの視覚化とpythonのmatplotlibを組み合わせたmpld3を使用することをお勧めします。
インストールと使用法は本当に簡単で、いくつかのクールなプラグインとインタラクティブなものがあります。
Plotlyはあなたのためにいくつかのクールなことをすることができます
オフラインAPIを使用してプライベートサーバーまたはウェブサイトのHTMLページに簡単に埋め込むことができる高度にインタラクティブなグラフを作成します。
更新: 2Dグラフが素晴らしいので、私はその3Dプロット機能について確信しています。
ここで行うように、データをシリアル化してD3.jsで視覚化することもできます 。PythonとPandasを使用して、D3 Force Directed Network Diagramを作成します(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チャートを埋め込むことができることです。
ライブラリd3graph
は、Python内からフォース指向のd3グラフを構築します。エッジの重みに基づいてネットワークを「分割」し、ノードにカーソルを合わせると詳細を確認できます。ノードをダブルクリックすると、ノードとその接続されたエッジに焦点が当てられます。
pip install d3graph
例:
source = ['node A','node F','node B','node B','node B','node A','node C','node Z']
target = ['node F','node B','node J','node F','node F','node M','node M','node A']
weight = [5.56, 0.5, 0.64, 0.23, 0.9,3.28,0.5,0.45]
# Import library
from d3graph import d3graph, vec2adjmat
# Convert to adjacency matrix
adjmat = vec2adjmat(source, target, weight=weight)
print(adjmat)
# target node A node B node F node J node M node C node Z
# source
# node A 0.00 0.0 5.56 0.00 3.28 0.0 0.0
# node B 0.00 0.0 1.13 0.64 0.00 0.0 0.0
# node F 0.00 0.5 0.00 0.00 0.00 0.0 0.0
# node J 0.00 0.0 0.00 0.00 0.00 0.0 0.0
# node M 0.00 0.0 0.00 0.00 0.00 0.0 0.0
# node C 0.00 0.0 0.00 0.00 0.50 0.0 0.0
# node Z 0.45 0.0 0.00 0.00 0.00 0.0 0.0
# Example A: simple interactive network
out = d3graph(adjmat)
# Example B: Color nodes
out = d3graph(adjmat, node_color=adjmat.columns.values)
# Example C: include node size
node_size = [10,20,10,10,15,10,5]
out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size)
# Example D: include node-edge-size
out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], cmap='Set2')
# Example E: include node-edge color
out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], node_color_edge='#00FFFF')
# Example F: Change colormap
out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], node_color_edge='#00FFFF', cmap='Set2')
# Example H: Include directed links. Arrows are set from source -> target
out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], node_color_edge='#00FFFF', cmap='Set2', directed=True)
titanic-caseのインタラクティブな例は、https: //erdogant.github.io/docs/d3graph/titanic_example/index.html https://erdogant.github.io/hnet/pages/html/Use%20Casesにあります。 .html