NetworkX graphviz_layout 不起作用?

wpq*_*anu 5 python graphviz networkx pygraphviz

我在尝试使用 NetworkX 和 graphviz_layout 绘制具有多个节点的图形时遇到问题。更具体地说,传递给 nx.graphviz_layout 的参数根本没有帮助。附上我使用的代码:

G=some_graph()

import matplotlib.pyplot as plt
plt.figure(figsize=(32,32))

# use graphviz to find radial layout
pos=nx.graphviz_layout(G,prog="dot",
                       root=1000,
                       args='-splines=true -nodesep=0.6 -overlap=scalexy'
                       )

nx.draw(G,pos,
        with_labels=True,
        alpha=0.5,
        node_size=600,
        font_size=10
        )

plt.savefig("imagenet_layout.png")
Run Code Online (Sandbox Code Playgroud)

无论我如何更改 nx.graphviz_layout 中的“args”,输出图像都是相同的,并且所有节点都相互重叠。有人可以帮我解决这个问题吗?谢谢!

Joe*_*oel 1

我对 pygraphviz文档overlap的阅读表明它不适用于dot.

为了nodesep

以点为单位,指定同一等级中两个相邻节点之间的最小间距(以英寸为单位)。

目前尚不清楚您观察到的重叠是在同一等级的节点之间还是在等级之间。如果只是在等级之间,您可能需要修改ranksep

我确实看到您正在设置位置,然后设置节点大小,并且您的节点node_size大小比默认值大很多(600 与 300)。由于它不知道node_size找到时要使用什么pos,因此使用足够大的值node_size会导致重叠。

所以我建议设置node_size为默认值,如果仍然存在重叠,则设置node_size较小。如果您对级别之间或级别内的分隔不成比例有疑问,请使用ranksepnodesep