Python相当于D3.js

Eiy*_*uyf 99 python graph d3.js graph-tool

任何人都可以推荐可以进行交互式图形可视化的Python库吗?

我特别想要像d3.js这样的东西,但是python理想情况下它也会是3D.

我看过:

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

小智 68

您可以使用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()
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是d3py还没有被积极开发 - 文森特是现代的等价物(Vega/d3.js的Python接口),但下面的psychemedia答案(将网络x导出到json,然后在d3.js中渲染)可能是最干净的. (7认同)
  • 尝试https://altair-viz.github.io/-d3py和vincent的后继者。另请参阅/sf/answers/3478683071/。 (2认同)

Mat*_*hez 38

Plotly支持交互式2D和3D图形.图表使用D3.js呈现,可以使用Python API,matplotlib,Python,Seaborn,prettyplotlibpandas的ggplot创建.您可以打开和关闭缩放,平移,切换轨迹,并查看悬停上的数据.Plots可以嵌入HTML,应用程序,仪表板和IPython笔记本中.下面是显示交互性的温度图.有关更多示例,请参阅IPython笔记本 教程库.

在此输入图像描述



文档提供了支持的图形类型和代码段的例子.



在此输入图像描述

特别针对您的问题,您还可以从NetworkX 制作交互式图表.

在此输入图像描述

对于使用Python进行3D绘图,您可以制作类似交互式的3D散点图,线图和曲面图.使用WebGL渲染绘图.例如,请参阅UK Swap费率的3D图表.



在此输入图像描述

披露:我在Plotly团队.

  • 很明显,这个问题的目标是**图**,在边缘连接的节点意义上.这个答案毫无疑问地包含了其他可视化功能. (6认同)
  • @mateo-sanchez 非常不幸的是,Plotly 决定终止所有学术和个人订阅,以专注于企业客户 (4认同)

sk8*_*123 20

你看过文森特吗?Vincent接受Python数据对象并将其转换为Vega可视化语法.Vega是基于D3构建的更高级别的可视化工具.与D3py相比,vincent仓库最近更新了.虽然这些例子都是静态D3.

更多信息:


可以在Ipython中查看图表,只需添加此代码即可

vincent.core.initialize_notebook()
Run Code Online (Sandbox Code Playgroud)

或输出到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/

  • [文森特正在出路](https://github.com/wrobstory/vincent#status) - 看起来有一些替代品,但我不确定他们将与ipython紧密相关.. (2认同)

psy*_*dia 17

我使用的一个方法(在此描述:GEXF中的联合主管网络数据文件和来自OpenCorporates Data通过Scraperwiki和networkx的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))
Run Code Online (Sandbox Code Playgroud)

或者,您可以将网络导出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)
Run Code Online (Sandbox Code Playgroud)


MrD*_*ner 16

另一种选择是散景,它只是0.3版本.


Wes*_*Wes 7

对于那些推荐pyd3的来说,它不再处于积极的发展状态,而是指向vincent.vincent也不再处于积极开发阶段,建议使用altair.

所以如果你想要一个pythonic d3,请使用altair.


ric*_*hie 5

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


erd*_*ant 5

该库d3graph将从 python 中构建一个力导向的 d3-graph。您可以根据边权重“破坏”网络,并将鼠标悬停在节点上以获取更多信息。双击节点将聚焦于该节点及其连接的边。

pip install d3graph
Run Code Online (Sandbox Code Playgroud)

例子:

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)
Run Code Online (Sandbox Code Playgroud)

d3graph 的示例

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


Ari*_*ric 1

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