124

谁能推荐一个可以进行交互式图形可视化的 Python 库?

我特别想要d3.js 之类的东西,但python理想情况下它也是 3D 的。

我看过:

  • NetworkX - 它只做Matplotlib情节,那些似乎是 2D 的。我没有看到任何形式的交互性,例如d3.js提供的交互性,例如拉动节点。
  • graph-tool - 它只做 2D 绘图并且有非常慢的交互式图表。
4

14 回答 14

76

您可以使用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()
于 2013-01-05T23:59:44.267 回答
49

Plotly 支持交互式 2D 和 3D 绘图。图形使用 D3.js 渲染,可以使用Python APImatplotlibggplot for PythonSeabornprettyplotlibpandas创建。您可以缩放、平移、打开和关闭跟踪,并在悬停时查看数据。绘图可以嵌入到 HTML、应用程序、仪表板和 IPython 笔记本中。下面是显示交互性的温度图。有关更多示例 ,请参阅IPython Notebooks 教程库。

在此处输入图像描述



文档提供了支持的绘图类型和代码片段的示例。



在此处输入图像描述

具体到您的问题,您还可以从 NetworkX 制作交互式绘图。

在此处输入图像描述

对于使用 Python 进行 3D 绘图,您可以制作具有类似交互性的 3D 散点图、线图和曲面图。绘图使用 WebGL 渲染。例如,查看英国掉期利率的 3D 图表



在此处输入图像描述

披露:我在 Plotly 团队。

于 2013-11-06T02:13:31.740 回答
21

你看过文森特吗?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 链接中找到。

不确定何时,但 Pandas 包应该在某个时候集成 D3。 http://pandas.pydata.org/developers.html

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

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

于 2013-10-10T19:28:07.307 回答
19

我使用的一个配方(在此处描述:Co-Director Network Data Files in GEXF and JSON from OpenCorporates Data via Scraperwiki 和 networkx)运行如下:

  • 使用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)
于 2013-03-16T23:56:37.850 回答
15

另一种选择是散景,它刚刚升级到 0.3 版。

于 2013-11-21T18:37:53.117 回答
8

对于那些推荐pyd3的人,它不再处于积极开发中,并指向vincent。vincent 也不再处于积极开发阶段,建议使用altair

因此,如果您想要 pythonic d3,请使用 altair。

于 2016-11-11T14:54:17.517 回答
6

试试https://altair-viz.github.io/ - d3py 和 vincent 的继承者。也可以看看

于 2018-04-06T14:50:16.300 回答
5

查看python-nvd3。它是 nvd3 的 python 包装器。看起来比 d3.py 更酷,并且还有更多图表选项。

于 2013-08-23T13:07:30.230 回答
4

我建议使用 mpld3,它将 D3js javascript 可视化与 python 的 matplotlib 相结合。

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

http://mpld3.github.io/

于 2015-02-09T11:45:35.030 回答
3

Plotly可以为你做一些很酷的事情在此处输入图像描述

https://plot.ly/

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

更新: 我确信它的 3D 绘图功能,因为 2D 图形很棒谢谢

于 2017-05-17T05:26:27.537 回答
2

您还可以选择序列化您的数据,然后在 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,我建议您参考链接。

于 2018-06-13T09:06:22.550 回答
1

NetworkX 有一个有趣的 Javascript 端口,可以满足您的需求。见http://felix-kling.de/JSNetworkX/

于 2012-10-24T22:31:11.497 回答
1

该库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)

d3graph 的例子

泰坦尼克号案例的交互式示例可以在这里找到: https ://erdogant.github.io/docs/d3graph/titanic_example/index.html https://erdogant.github.io/hnet/pages/html/Use%20Cases .html

于 2020-06-23T06:53:23.283 回答
0

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

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

于 2017-07-11T17:04:30.713 回答