D3.jsに相当するPython


110

誰でもインタラクティブなグラフの視覚化を行えるPythonライブラリを推奨できますか?

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

私は見ました:

  • NetworkX-Matplotlibプロットのみを行い、それらは2Dのようです。d3.jsノードを引き寄せるなどのインタラクティブ性はありませんでした。
  • グラフツール -2Dプロットのみを実行し、非常に遅い対話型グラフを使用します。

1
ブラウザーベースのバージョンを探している場合は、networkxでグラフを生成してから、d3.jsで操作することをお勧めします。
kreativitea 2012年

@kreativitea ok .... ooを理想的にするにはどうすればよいですか:グラフデータ(PythonのAPI呼び出しを介して)-> Python(機械学習スタッフ)-> Django / Something + D3.js(視覚化)->きれいな写真とウェブサイト:)
EiyrioüフォンKauyf

Pythonでvega liteを実装できると思います。もちろん、これをチェックして、作図してください。
ノエルハリス

回答:


74

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()

私にとってはうまくいきましたが、の行の​​1つを編集する必要がありましたwith d3py.NetworkXFigure(G, width=500, height=500, host="localhost") as p:。私はgithub(SHA:4e92a90f4003370bc086e0f57b19fca1bd4e8fba)
xb

7
残念ながら、d3pyは積極的に開発されていません。Vincentは最新の同等物(Vega / d3.jsへのPythonインターフェース)ですが、下記のpsychemediaの回答(networkxをjsonにエクスポートしてからd3.jsでレンダリングする)が最もクリーンかもしれません。
A.Wan

2
試してみてくださいaltair-viz.github.io - d3pyとヴィンセントの後継者を。stackoverflow.com/a/49695472/179014も参照してください。
asmaier

43

Plotlyはインタラクティブな2Dおよび3Dグラフをサポートしています。グラフはD3.jsでレンダリングされているとして作成することができますPythonのAPImatplotlibのPython用ggplotSeabornprettyplotlib、そしてパンダ。ズーム、パン、トレースのオン/オフの切り替え、ホバーのデータの確認ができます。プロットは、HTML、アプリ、ダッシュボード、IPython Notebookに埋め込むことができます。以下は、対話性を示す温度グラフです。その他の例については、IPython Notebooks チュートリアルのギャラリーをご覧ください。

ここに画像の説明を入力してください



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



ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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



ここに画像の説明を入力してください

情報開示:私はPlotlyチームに所属しています。


9
明らかに、質問はエッジで接続されたノードの意味でのグラフを目的としています。この回答には、plotlyの他の視覚化機能が不必要に含まれています。
LutzBüch18年

@ mateo-sanchez Plotlyが法人顧客に焦点を合わせるためにすべてのアカデミックおよび個人のサブスクリプションを終了することを決定したことは非常に残念です
Andreuccio

20

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

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


2
Vincentは間もなくリリースされます
。– naught101

19

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

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

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)


7

推奨人のためpyd3を、それはへの積極的な開発やポイントあなたの下ではなくなりましたヴィンセント。ヴィンセントは活発に開発もはやもありませんし、使用することをお勧めしますALTAIRを

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



5

python-nvd3をチェックしてください。それはnvd3のpythonラッパーです。d3.pyよりもクールに見え、さらに多くのグラフオプションがあります。


4

D3js javascriptの視覚化とpythonのmatplotlibを組み合わせたmpld3を使用することをお勧めします。

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

http://mpld3.github.io/


3

Plotlyはあなたのためにいくつかのクールなことをすることができますここに画像の説明を入力してください

https://plot.ly/

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

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


2
これはチャートの視覚化であることに注意してください...質問はグラフの視覚化を要求します。(私はこれらのフレーズが一般的に混同されていることに感謝します!)
j6m8

2

ここで行うように、データをシリアル化してD3.jsで視覚化することもできます 。PythonPandasを使用して、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、リンクを参照してください。


私は今それを編集しましたが、それ自体がdrawLinksおよびdrawNodesを呼び出すdrawGraphルーチンを含めませんでした。それは面倒すぎて、要素はhtmlファイル全体のコンテキストでのみ意味があります。
LutzBüch18年

1

NetworkXのJavascriptへの興味深い移植があり、あなたが望むことをするかもしれません。http://felix-kling.de/JSNetworkX/を参照してください


これはうまくいくかもしれません...私にドキュメントを参照してもらえますか?PythonからこのJavaScriptライブラリにグラフを出力するにはどうすればよいですか?最初にそれをPythonで生成したい...またはどのようにロードしますか?
EiyrioüフォンKauyf

私は実際にJSNetworkXを使用したことがないので、それがどのように機能するかわかりません。
ARIC

@EiyrioüvonKauyf:入力はPythonの場合と同じです。たとえば、リストのリストやdictのdictです。Pythonでグラフを作成し、リストのリストに変換して、JSONに変換できます。
Felix Kling、2012年

はい、間違いなく簡単です。ここの例はシンプルで美しいです:felix-kling.de/JSNetworkX/examples
Aric

1

見る:

優れたインタラクティブな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


0

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

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


0

ライブラリ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)

d3graphの例

titanic-caseのインタラクティブな例は、https//erdogant.github.io/docs/d3graph/titanic_example/index.html https://erdogant.github.io/hnet/pages/html/Use%20Casesにあります。 .html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.