Skip to main content
 首页 » 编程设计

python之如何使用 networkx 和 d3py 绘制图形

2025年05月04日9yyy_WW

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

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

请您参考如下方法:

这是部分答案,但也请阅读最后的警告。

最简单的事情是改变节点颜色。如果你运行你指向的例子

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

然后您将拥有带有洋红色轮廓的蓝色节点(您可以使用您喜欢的任何 html 颜色)。

对于边缘颜色,在文件 d3py/geoms/graph.py 中有一个硬编码的 stroke: black;。您可以将其注释掉并重新安装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 示例,networkx_figure.py 中缺少一个 host 参数)。几个月以来 repo 中没有任何事件,所以我猜这个项目可能被放弃了。直接使用 d3.js 可能会更轻松地实现您的目标。