如何使用 pygraphviz 增加点图中节点之间的间距?

Posted

技术标签:

【中文标题】如何使用 pygraphviz 增加点图中节点之间的间距?【英文标题】:How can I increase spacing between nodes in dot graph with pygraphviz? 【发布时间】:2020-12-06 03:32:24 【问题描述】:

我在尝试增加我正在制作的分层图中节点之间的间距时遇到了麻烦。我希望在此图上放置标签,因此节点之间的间距必须相当大,但我不确定 pygraphvis_layout 的“args”参数如何工作,或者我是否正确使用它。

似乎相同等级的节点之间的间距至少应为 2 英寸,但这并未反映在实际图像中。据我测试,改变提供给 nodeep 的数字对间距没有影响。

我已经查看了其他解决方案:pydot 没有工作,并且似乎输出了我无法打开的 png 文件,并且我已经在使用 NetworkX 来绘制其他相关的图形。

(除了指定的导入之外,复制还需要 graphviz。)

import networkx as nx
import matplotlib.pyplot as plt
from networkx.drawing.nx_agraph import pygraphviz_layout

plt.figure(figsize=(10, 7))
graph = nx.DiGraph([(0, 1), (0, 2),
                    (1, 3), (1,4), (2,5), (2,6),
                    (3, 7), (3, 8), (4, 9), (4, 10), (5, 11), (5, 12), (6, 13), (6, 14)])
pos = pygraphviz_layout(graph, prog="dot", args='-Gnodesep=2')
nx.draw_networkx_nodes(
    graph, pos, nodelist=graph.nodes, node_size=1000, node_color="r", alpha=0.8
)
nx.draw_networkx_edges(graph, pos, edgelist=graph.edges, width=1, edge_color="k")
plt.axis("off")
plt.savefig("test.svg")
plt.show()

【问题讨论】:

【参考方案1】:

绘制图形的空间受图形大小的限制。试玩一下大小,例如:

pos = pygraphviz_layout(graph, prog="dot", args='-Gnodesep=2')
nx.draw_networkx_nodes(...)
nx.draw_networkx_edges(...)
plt.figure(figsize=(20,20))
plt.show()

一旦大小足够大,Gnodesep 参数应该可以工作。

【讨论】:

以上是关于如何使用 pygraphviz 增加点图中节点之间的间距?的主要内容,如果未能解决你的问题,请参考以下文章

Graphviz 与 PyGraphViz

Pygraphviz / networkx 设置节点级别或层

去除最少边以强制增加未加权无向图中最短路径长度的算法

pygraphviz OSError:格式:“点”无法识别。使用以下之一:

图中两个点之间的路线

增加网络/图表中节点之间的距离