我正在尝试使用d3py可视化从networkx生成的图形。 我使用了提供的示例(https://github.com/mikedewar/d3py/blob/master/examples/d3py_graph.py),但我得到的是没有节点名称的图形,我如何绘制节点名称?
另外,如何更改边缘和节点颜色?
答案 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)
我建议您尝试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)命令不会渲染图形。 它是一个“头脑中的情节”或抽象表示,你可以在真正渲染它之前进行自定义。
matplotlib可用于绘制静态图形。如果你想绘制交互式Javascript图,那么这里有一些有趣的库(包括D3.js)
这些库是独立的,它们在networkx中的使用通常在webx代码驻留在后端并且Javascript代码位于前端的Web应用程序中更有用。