如何使用networkx和d3py绘制图形

时间:2013-07-09 15:37:04

标签: python d3.js graph networkx d3py

我正在尝试使用d3py可视化从networkx生成的图形。 我使用了提供的示例(https://github.com/mikedewar/d3py/blob/master/examples/d3py_graph.py),但我得到的是没有节点名称的图形,我如何绘制节点名称?

另外,如何更改边缘和节点颜色?

3 个答案:

答案 0 :(得分:5)

这是一个部分答案,但最后还要阅读警告。

最简单的方法是更改​​节点颜色。如果运行您使用

指向的示例
with d3py.NetworkXFigure(G, width=500, height=500) as p:
    p += d3py.ForceLayout()
    p.css['.node'] = {'fill': 'blue', 'stroke': 'magenta'}
    p.show()

然后你会有一个洋红色轮廓的蓝色节点(你可以使用你喜欢的任何html颜色)。

对于边缘颜色,文件stroke: black;中有一个硬编码d3py/geoms/graph.py。您可以将其注释掉并重新安装d3py

line = {
    "stroke-width": "1px",
     "stroke": "black",
}
self.css[".link"] = line

然后您可以按如下方式指定边缘颜色和宽度:

with d3py.NetworkXFigure(G, width=500, height=500) as p:
    p += d3py.ForceLayout()
    p.css['.node'] = {'fill': 'blue', 'stroke': 'magenta'}
    p.css['.link'] = {'stroke': 'red', 'stoke-width': '3px'}
    p.show()

似乎没有任何方法可以使用d3py轻松添加节点标签。仅使用d3.js,可以相对容易地完成(参见this example)。这引出了我们的主要警告...

<强>买者

正如@flup已经提到的那样,d3py看起来并不成熟(他们的Github存储库中的代码甚至没有运行NetworkX示例,host中缺少networkx_figure.py参数。自几个月以来,回购中没有任何活动,所以我猜这个项目可能已经放弃了。您可以直接使用d3.js更轻松地达到目标。

答案 1 :(得分:3)

万一有人最终到处看看d3py。我几年前制作了d3py,现在看看从Python绘制d3图形会是什么感觉。好玩!但我没有时间做得恰当,这是一种耻辱。

然而,Rob Story做到了!他制作了文森特,可在https://github.com/wrobstory/vincent获得。这是一个更好的实现,并且更好地考虑。请检查一下!

答案 2 :(得分:1)

使用networkx绘制'静态'图表。

我建议您尝试mathplotlib networkx 本身recommends使用matplotlib作为绘图补充。 它易于使用,并绘制了非常好的图形。

假设您有一个networkx图“G”。你可以用3行代码绘制它。

>>> import matplotlib.pyplot as plt
>>> nx.draw(G)
>>> plt.show()

此外,可以灵活地选择不同的布局。

>>> nx.draw_random(G)
>>> nx.draw_circular(G)
>>> nx.draw_spectral(G)

在使用plt.show()之前,使用nx.draw *(G)命令不会渲染图形。 它是一个“头脑中的情节”或抽象表示,你可以在真正渲染它之前进行自定义。

绘制交互式javascript / html5图表 -

matplotlib可用于绘制静态图形。如果你想绘制交互式Javascript图,那么这里有一些有趣的库(包括D3.js)

这些库是独立的,它们在networkx中的使用通常在webx代码驻留在后端并且Javascript代码位于前端的Web应用程序中更有用。