我正在尝试使用Python、NetworkX和Matplotlib输出一个力导向图的PNG。以下是当前的效果:
节点重叠很多,边长度非常短,聚类非常稀疏。如果使用d3.js可视化相同的图形,效果如下(忽略不同的颜色、边权重和箭头,我并不试图复制它们):
如您所见,这种排版更加易读且具有视觉吸引力,因为节点间距更大,簇更加紧密,白色空间较少。
尽管我阅读了我能找到的所有主题,并尝试了几十次节点大小、图形大小、边缘权重以及边缘长度属性(似乎没有什么作用,但可能是因为它是任意属性),但我无法使matplotlib图表看起来像d3.js一样,即使两个图表都是使用完全相同的节点、节点大小和边缘创建的。
不幸的是,在d3.js中创建它们并不是一个真正的选择,因为我希望创建成千上万个静态PNG,并且我不想在浏览器中渲染它们然后截屏!
因此,我的问题是:是否(a)有改善matplotlib布局的方法(通过增加边缘长度和/或避免节点重叠和/或减少空格),(b)输出d3.js力导向图为PNG(或任何静态格式)的方法,或者(c)我可以使用其他库来输出格式更好的力导向图像?
iterations
参数,它显示了我推测的图形动画中不同点的位置,例如:pos = nx.spring_layout(G, iterations=100) nx.draw(G, pos)
这 可能 有用,但我不确定如何确定什么数量的迭代对于不同大小的图最理想...而且,d3.js所有这些都是自动完成的。 - Chris