【发布时间】:2018-06-22 17:28:35
【问题描述】:
我正在尝试使用 python 来输出使用 networkx 和 matplotlib 的力图的 PNG。这是它目前的样子:
节点重叠很多,边长很短,簇很稀疏。
如果我使用 d3.js 可视化相同的图表,会发生以下情况(忽略不同的颜色、边缘权重和箭头,我不试图重现):
如您所见,这更“清晰”且视觉上更吸引人,因为节点间距更好,集群更靠近,留下的空白空间更少。
尽管阅读了我可以在这里找到的每个主题,并尝试了几十次迭代,包括节点大小、图形大小、边权重和边 length 属性(这似乎没有任何作用,但这可能是因为它是任意属性),我无法使 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 再次自动完成这一切。 -
另外,我很想知道为什么有人反对这篇文章,因为它非常清楚地概述了问题和问题!
标签: python d3.js matplotlib graph networkx