networkx/igraph (Python) 上的指定边长

Posted

技术标签:

【中文标题】networkx/igraph (Python) 上的指定边长【英文标题】:Specified edge lengths on networkx/igraph (Python) 【发布时间】:2009-12-05 06:06:49 【问题描述】:

我想用我拥有的数据来可视化一个网络,并想用特定的边长来绘制它们。我使用 Python,并且尝试使用 networkx 和 igraph 进行绘图,但似乎都指定了固定的边长。

a.) 我想知道是我做错了代码还是这些软件包真的没有能力。如何正确实现 networkx 或 igraph 的指定边长?

b.) 如果 networkx 和 igraph 不能做到这一点,你可能会建议什么包? (最好能承载8万以上节点)

谢谢!

【问题讨论】:

一般网络/图形绘图程序不允许您指定固定边长,因为如果您还固定边长,则并非所有图形都可以绘制。想象一个边长为 1,1,100 的三角形。所以如果有一个包,它就不是一个通用的绘图包。要么你的图表有什么特别之处使它成为可能,要么你必须自己编程。 【参考方案1】:

这应该可行:

import networkx as NX
import pygraphviz as PG

G = PG.AGraph()
nlist = "A B C D E".split()
a, b = "A A B", "B C D"
elist = zip(a.split(), b.split())

G.add_nodes_from(nlist)
G.add_edges_from(elist)
G.node_attr.update(color="red", style="filled")
G.edge_attr.update(color="blue", len="2.0", )

print(G.edge_attr)
# returns 'color': 'red', 'width': '', 'len': '2.0'

# add new edge with custom length (all others have length=2.0):
G.add_edge("C", "E", len="3.0", color="blue", )

edge = G.get_edge("C", "E")
print(edge_attr)
# returns 'color': 'blue', 'width': '2.0', 'len': '3.0'

# and you can confirm that introspection by drawing & printing this graph:
G.draw('somefolderandfilename.png', format='png', prog='neato')

大多数图形绘制算法都使用某些版本的 SMACOF,这当然会改变边长;但是,graphviz 布局引擎 'neato'(作为上面 'draw' 的第二个参数提供)应该尽可能保留用户设置的边长。

我在这里使用的库肯定足够强大,可以处理 80,000 个节点。

【讨论】:

你能展示如何用graphviz包而不是pygraphviz做同样的事情吗? 上述答案不如@doug 承诺的那么好。这个“graphviz 布局引擎 'neato' 应该尽可能保留用户设置的边长。”根本不是真的。我创建了几个最小生成树图,其中用户给定的长度完全可以保留,但它仍然没有。当有多个节点(例如 +30)时,该问题尤其明显。尽管如此,这是迄今为止我发现的最好的 Python 算法。

以上是关于networkx/igraph (Python) 上的指定边长的主要内容,如果未能解决你的问题,请参考以下文章

001--python全栈--基础知识--python安装

Python代写,Python作业代写,代写Python,代做Python

Python开发

Python,python,python

Python 介绍

Python学习之认识python