web-dev-qa-db-ja.com

Python D3.jsと同等

誰でもinteractiveグラフの視覚化が可能なPythonライブラリを推奨できますか?

具体的には d3.js のようなものが必要ですが、pythonの場合、理想的には3Dにもなります。

私が見た:

  • NetworkX -Matplotlibプロットのみを行い、それらは2Dのように見えます。ノードを引っ張るなど、d3.jsが提供するような対話性はありませんでした。
  • graph-tool -2Dプロットのみを行い、非常に遅いinteractiveグラフを持ちます。
98

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()
66
Vincent Agnus

Plotlyは、インタラクティブな2Dおよび3Dグラフをサポートします。グラフはD3.jsでレンダリングされ、 Python APImatplotlibggplot for PythonSeabornprettyplotlib 、および pandas 。トレースのズーム、パン、トグルのオン/オフの切り替え、ホバー上のデータの表示を行うことができます。プロットは、HTML、アプリ、ダッシュボード、およびIPythonノートブックに埋め込むことができます。以下は、対話性を示す 温度グラフ です。その他の例については、 IPython Notebookstutorials のギャラリーを参照してください。

enter image description here



docs は、サポートされているプロットタイプとコードスニペットの例を提供します。



enter image description here

あなたの質問に特化して、NetworkXから インタラクティブプロット を作成することもできます。

enter image description here

Pythonを使用した3Dプロットの場合、同様にインタラクティブな3D散布図、ラインプロット、および表面プロットを作成できます。プロットはWebGLでレンダリングされます。たとえば、英国のスワップレートの a 3Dグラフ を参照してください。



enter image description here

開示:私はPlotlyチームにいます。

38
Mateo Sanchez

ヴィンセントを見たことがありますか? 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であり、クライアント/サーバーモデルを使用します。

例: http://continuumio.github.io/bokehjs/

20
sk8asd123

私が使用したレシピの1つ(ここで説明します: GEXFのCo-DirectorネットワークデータファイルとScraperwikiおよびnetworkxを介したOpenCorporates DataのJSON )は、次のように実行されます。

  • networkxを使用してネットワーク表現を生成します
  • ネットワークをJSONファイルとしてエクスポートします
  • そのJSONをd3.jsにインポートします。 (networkxは、d3.jsインポートできます)。

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)
17
psychemedia

別のオプションは bokeh で、これはバージョン0.3になりました。

16
MrDrFenner

python-nvd を確認してください。 nvd3のpythonラッパーです。 d3.pyよりも見栄えがよく、チャートオプションも多くあります。

5
richie

pyd を推奨している人にとっては、もはや活発な開発中ではなく、 vincent を指し示しています。 vincentも現在開発中ではないため、 altair の使用を推奨しています。

したがって、Pythonic d3が必要な場合は、altairを使用してください。

5
Wes

D3js javascriptビジュアライゼーションとpythonのmatplotlibを組み合わせたmpld3を使用することをお勧めします。

インストールと使用方法は本当にシンプルで、いくつかのクールなプラグインとインタラクティブなものがあります。

http://mpld3.github.io/

4
Ram

次のように、データをシリアル化してから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については、リンクを参照してください。

2
Lutz Büch

Plotlyはあなたのためにいくつかクールなことをすることができます enter image description here

https://plot.ly/

オフラインAPIを使用して、プライベートサーバーまたはWebサイトのHTMLページに簡単に埋め込むことができる非常にインタラクティブなグラフを作成します。

更新:2Dグラフは素晴らしいので、その3Dプロット機能について確信しています

2
jax
2
asmaier

NetworkXのJavascriptへの興味深い移植版があります。 http://felix-kling.de/JSNetworkX/ を参照してください

1
Aric

見る:

優れたインタラクティブな3Dグラフライブラリはありますか?

受け入れられた答えは、明らかに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

1
juniper-

ここにPythonを使用してD3.jsネットワーク図を自動生成する良い例があります: http://brandonrose.org/ner2sna

クールなことは、自動生成されたHTMLとJSになり、IFrameを使用してインタラクティブなD3チャートをノートブックに埋め込むことができることです。

0
brandomr