2012-10-19 144 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