相当于 D3.js 的 Python 语言

有人能推荐一个可以实现 互动图形可视化的 Python 库吗?

我特别想要像 D3.js的东西,但对于 python和理想情况下,它将是3D 的。

我看过:

  • NetworkX -它只能绘制 Matplotlib地图,而且那些地图看起来是2D 的。我没有看到任何交互性,比如 d3.js提供的交互性,比如拉动节点。
  • Graph-tool -它只做2D 图形,而且有非常慢的 互动图形。
129601 次浏览

有一个有趣的 NetworkX 到 Javascript 的端口,它可以满足您的需要

您可以使用 D3py一个 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()

我使用过的一个配方(在这里描述: 联合主管网络数据文件在 GEXF 和 JSON 从公司数据通过 Scraperwiki 和 networkx)运行如下:

  • 使用 Networkx生成网络表示
  • 将网络导出为 JSON 文件
  • 将 JSON 导入到 网址: http://d3js.org/rel = “ noReferrer”> d3.js 中(Networkx可以导出 D3.js可以导入的树和图/网络表示)。

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

看看 Python-nvd3,它是 nvd3的一个 Python 包装器,看起来比 d3.py 更酷,而且还有更多的图表选项。

你看过 Vincent 了吗?Vincent 获取 Python 数据对象并将其转换为 Vega 可视化语法。Vega 是一个构建在 D3之上的高级可视化工具。与 D3py 相比,Vincent 的回购最近更新了。虽然这些例子都是静态的 D3。

更多信息:


图表可以在 Ipython 查看,只需添加这个代码

vincent.core.initialize_notebook()

或者输出到 JSON,您可以在 Vega 在线编辑器(http://trifacta.github.io/vega/editor/)中查看 JSON 输出图,或者在本地 Python 服务器上查看它们。更多的观看信息可以在上面的 pypi 链接中找到。

不确定什么时候,但是熊猫包应该在某个时候有 D3集成

Bokeh 是一个支持交互式可视化的 Python 可视化库。它的主要输出后端是 HTML5 Canvas,并使用客户机/服务器模型。

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

Plotly 支持交互式2D 和3D 绘图。图是用 D3.js 呈现的,可以用 Python APIMatplotlibPython 的 ggplot海洋生物美丽的自由熊猫创建。你可以放大,平移,切换轨迹和关闭,并看到悬停的数据。情节可以嵌入在 HTML、应用程序、仪表板和 IPython 笔记本中。下面是一个显示交互性的 温度图温度图温度图。有关更多示例,请参见 IPython 笔记本教程图库。

enter image description here



医生提供了受支持的绘图类型和代码片段的示例。



enter image description here

具体到您的问题,您也可以从 NetworkX 的 制作互动情节

enter image description here

对于使用 Python 进行3D 绘图,您可以制作具有类似交互性的3D 散点图、线图和表面图。使用 WebGL 呈现情节。例如,参见英国掉期利率的 三维图形



enter image description here

透露一下,我是阴谋小组的。

另一个选项是 Bokeh,它刚刚升级到0.3版本。

我建议使用 mpld3,它结合了 D3js javascript 可视化和 python 的 matplotlib。

安装和使用真的很简单,它有一些很酷的插件和互动的东西。

Http://mpld3.github.io/

对于那些谁推荐的 Pyd3,它不再是积极的发展,并指出你的 Vincent。文森特也不再积极发展,并建议使用 牛郎星

因此,如果你想要一个 pythonic d3,使用 altair。

阴谋 可以为你做一些很酷的事情enter image description here

Https://plot.ly/

生成高度交互的图形,可以很容易地嵌入到您的私人服务器或网站的 HTML 页面使用其离线 API。

更新: 我注意到它的3D 绘图能力,因为2D 图形是令人敬畏的 谢谢

这里有一个使用 Python 自动生成 D3.js 网络图的好例子: http://brandonrose.org/ner2sna

最酷的是,您最终可以自动生成 HTML 和 JS,并且可以将交互式 D3图表嵌入到带有 IFrame 的笔记本中

您还可以选择序列化数据,然后在 D3.js 中将其可视化,如下所示: 使用 Python & Panda 创建一个 D3 Force Directed Network Diagram (它还附带一个 木星笔记本!)

这里是要点。您将图形数据序列化为以下格式:

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,我建议您参考链接。

d3graph将从 python 内部构建一个强制定向的 d3-graph。您可以根据边缘权重“破坏”网络,并悬停在节点上以获取更多信息。双击一个节点将关注该节点及其连接边。

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)

Examples of d3graph

泰坦尼克号事件的互动例子可以在这里找到: Https://erdogant.github.io/docs/d3graph/titanic_example/index.html Https://erdogant.github.io/hnet/pages/html/use%20cases.html