与D3.js相当的Python

与D3.js相当的Python,python,graph,d3.js,graph-tool,Python,Graph,D3.js,Graph Tool,有人能推荐一个可以进行交互式图形可视化的Python库吗 我特别想要像but forpython这样的东西,理想情况下它也是3D的 我看过: -它只进行Matplotlib绘图,而且这些绘图看起来是二维的。我没有看到任何交互性,像是d3.js提供的交互性,比如拉节点 -它只进行2D绘图,并且具有非常慢的交互式图形 见: 公认的答案建议使用以下程序,该程序显然具有python绑定: 编辑 我不确定NetworkX的交互性,但你绝对可以制作3D图形。库中至少有一个示例: 还有“例子”中的另一个

有人能推荐一个可以进行交互式图形可视化的Python库吗

我特别想要像but for
python
这样的东西,理想情况下它也是3D的

我看过:

  • -它只进行
    Matplotlib
    绘图,而且这些绘图看起来是二维的。我没有看到任何交互性,像是
    d3.js
    提供的交互性,比如拉节点
  • -它只进行2D绘图,并且具有非常慢的交互式图形
见:

公认的答案建议使用以下程序,该程序显然具有python绑定:

编辑

我不确定NetworkX的交互性,但你绝对可以制作3D图形。库中至少有一个示例:

还有“例子”中的另一个例子。但是,这一个要求您拥有Mayavi


NetworkX到Javascript有一个有趣的端口,它可以做您想要做的事情。请参见

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

我使用的一个配方(此处描述:)如下所示:

  • 使用networkx生成网络表示
  • 将网络导出为JSON文件
  • 将该JSON导入到。(networkx可以导出d3.js可以导入的树和图形/网络表示)
报告的形式如下:

from networkx.readwrite import json_graph
import json
print json.dumps(json_graph.node_link_data(G))
或者,您可以将其作为GEXF XML文件,然后将此表示导入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)

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

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

更多信息:


这些图可以在Ipython中查看,只需添加以下代码

vincent.core.initialize_notebook()
或者输出到JSON,您可以在Vega online editor()中查看JSON输出图,或者在Python服务器上本地查看它们。有关查看的更多信息,请参见上面的pypi链接

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

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


示例:

绘图支持交互式二维和三维绘图。图形是用D3.js呈现的,可以用、、和创建。可以缩放、平移、打开和关闭轨迹,以及在悬停时查看数据。绘图可以嵌入HTML、应用程序、仪表板和IPython笔记本中。下面是一个展示互动性的例子。有关更多示例,请参见的图库。



提供了受支持的打印类型和代码段的示例





具体到您的问题,您也可以从NetworkX。



对于使用Python进行的三维打印,可以创建类似交互的三维散点、直线和曲面打印。打印使用WebGL进行渲染。例如,请参见英国掉期利率表




披露:我是Plotly团队的一员。

另一个选项是刚刚升级到0.3版。

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

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

对于推荐者,它不再处于积极开发中,并向您指出。vincent也不再积极开发,建议使用


因此,如果你想要一个蟒蛇d3,使用牵牛星。

可以为你做一些很酷的事情

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

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

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

最酷的是,你最终可以自动生成HTML和JS,并可以将交互式D3图表嵌入到带有IFrame的笔记本中,IFrame是d3py和vincent的继承者。另见


您也可以选择序列化数据,然后在D3.js中可视化数据,如下所示: (它还附带了一个!)

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

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图。您可以基于边权重“断开”网络,并将鼠标悬停在节点上以获取更多信息。双击节点将聚焦于该节点及其连接的边

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)

泰坦尼克号案例的互动示例可在此处找到:

如果您正在寻找基于浏览器的版本,您可能希望在networkx中生成一个图形,然后在d3.js中进行操作。@krativitea ok。。。。理想情况下,我应该如何实现o-o:图形数据(通过Python中的API调用)->Python(机器学习工具)->Django/Something+D3.js(可视化)->漂亮的图片和网站:)我认为您可以在Python中实现vega lite。看看这个,当然,这可能有用。。。。你能帮我看一下文件吗?如何将python中的图形输出到这个javascript库中。。。?我想先用python生成它。。。或者我该如何加载它?我实际上从未使用过JSNetworkX,所以我不确定它是如何工作的。@EiyrioüvonKauyf:输入与Python中的输入相同,例如列表