2012-10-19 211 views
74

任何人都可以推薦一個Python庫,可以做interactive圖形可視化?Python的等價物D3.js

我特別想要一些像d3.jspython,理想情況下它也是3D。

我已經看過:

  • NetworkX - 它只做Matplotlib情節和那些似乎是2D。我沒有看到任何形式的互動,就像d3.js給出的那樣,例如拉動節點。
  • graph-tool - 它只有2D圖,並有非常緩慢的交互圖。
+1

你會想產生networkx的圖形,然後在D3操縱。 Ĵ如果你正在尋找基於瀏覽器的版本。 – kreativitea

+0

@kreativitea確定....我會如何做到這一點理想: 圖形數據(通過API調用Python) - > Python(機器學習材料) - > Django /東西+ D3.js(可視化) - >漂亮圖片和網站:) –

回答

1

參見:

Is there a good interactive 3D graph library out there?

接受的答案提出了以下方案,該方案顯然有python綁定:http://ubietylab.net/ubigraph/

編輯

我不知道的NetworkX的交互性,但您絕對可以製作3D圖形。有一個在畫廊至少一個例子:

http://networkx.lanl.gov/examples/drawing/edge_colormap.html

,並在「實例」的另一個例子。但是,這個要求你有Mayavi。

http://networkx.lanl.gov/examples/3d_drawing/mayavi2_spring.html

1

有NetworkX的爲Javascript一個有趣的端口可能會做你想要什麼。請參閱http://felix-kling.de/JSNetworkX/

+0

這可能工作....你能向我推薦文件嗎?我怎麼會輸出一個圖形從python到這個JavaScript庫...?我想先在python中生成它...或者我將如何加載它? –

+0

我從來沒有使用JSNetworkX,所以我不知道它是如何工作的。 – Aric

+0

@EiyrioüvonKauyf:輸入與Python中的輸入相同,例如,列表或字典的字典列表。您可以使用Python構建圖表,將其轉換爲列表列表並將其轉換爲JSON。 –

50

您可以使用d3py一個生成嵌入d3.js腳本的xml頁面的python模塊。例如:

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

爲我工作,但我不得不編輯其中一行到'with d3py.NetworkXFigure(G,width = 500,height = 500,host =「localhost」)爲p:'。我在github上檢查了_d3py_的最新提交(SHA:4e92a90f4003370bc086e0f57b19fca1bd4e8fba) –

+5

不幸的是,d3py沒有被積極地開發 - 文森特是現代等價物(與Vega/d3.js的Python接口),但是psychemedia的答案在下面(導出網絡x到json然後在d3.js中渲染)可能是最乾淨的。 –

15

一個配方,我已經使用(這裏描述:Co-Director Network Data Files in GEXF and JSON from OpenCorporates Data via Scraperwiki and networkx)運行如下:

  • 生成使用networkx
  • 一個網絡表示的網絡導出爲JSON文件
  • 將JSON導入到d3.js。 (網絡x可以導出樹和圖形/網絡表示,可以導入d3.js)。

networkx JSON exporter採取以下形式:

from networkx.readwrite import json_graph 
import json 
print json.dumps(json_graph.node_link_data(G)) 

另外,您可以export the network作爲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) 
5

結帳python-nvd3。它是nvd3的python包裝。看起來比d3.py更酷,也有更多圖表選項。

19

你看過文森特嗎? Vincent使用Python數據對象並將它們轉換爲Vega可視化語法。 Vega是構建在D3之上的更高級別的可視化工具。與D3py相比,vincent repo最近更新了。雖然這些例子都是靜態的D3。

更多信息:


的圖表可以在IPython中觀看,只需添加以下代碼

vincent.core.initialize_notebook() 

或輸出到JSON,您可以在Vega在線編輯器(http://trifacta.github.io/vega/editor/)中查看JSON輸出圖或在您的Python服務器本地查看它們。有關查看的更多信息可以在上面的pypi鏈接中找到。

不知道什麼時候,但熊貓軟件包應該在某個時候有D3集成。 http://pandas.pydata.org/developers.html

Bokeh是一個支持交互式可視化的Python可視化庫。其主要輸出後端是HTML5 Canvas並使用客戶端/服務器模型。

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

+2

[文森特正在出路](https://github.com/wrobstory/vincent#status) - 看起來有一些替代品,但我不確定它與ipython的緊密聯繫,他們將會是.. – naught101

19

Plotly支持交互式2D和3D圖形。圖表用D3.js呈現,可以用Python API,matplotlib,ggplot for Python,Seaborn,prettyplotlibpandas來創建。您可以放大,平移,打開和關閉軌跡,並查看懸停上的數據。圖可以嵌入到HTML,應用程序,儀表板和IPython筆記本中。以下是顯示交互性的temperature graph。有關更多示例,請參閱IPython Notebookstutorials的圖庫。

enter image description here



docs提供了支持的圖形類型和代碼段的例子。



enter image description here

具體到你的問題,你也make interactive plots從NetworkX可以。

enter image description here

對於與Python的3D繪圖,可以使三維散點,線和曲面圖是類似的互動。繪圖使用WebGL進行渲染。例如,請參閱英國掉期利率的a 3D graph



enter image description here

披露:我在Plotly隊。

3

我會建議使用mpld3,它結合了D3js JavaScript可視化與python的matplotlib。

安裝和使用非常簡單,它有一些很酷的插件和互動的東西。

http://mpld3.github.io/

5

對於那些誰推薦pyd3,它不再是正在積極發展,併爲您指出vincent。文森特也不再積極發展,並建議使用altair

所以,如果你想要pythonic d3,請使用altair。

0

Plotly可以爲你enter image description here

https://plot.ly/

產生可方便地嵌入withing使用其離線API您的私人服務器或網站的HTML頁面高度互動的圖表做一些很酷的東西。

更新: 我注意把握其3D繪圖功能,2D圖形是真棒 感謝

+0

注意這是_chart_可視化...該問題請求_graph_可視化。 (我很欣賞這些短語通常是混合的!) – j6m8

0

我得在這裏使用Python自動生成D3.js網絡圖一個很好的例子:http://brandonrose.org/ner2sna

很酷的事情是,你最終自動生成HTML和JS並可以嵌入在筆記本互動D3圖表與一個IFrame