Как я могу увеличить расстояние между узлами в точечном графике с помощью pygraphviz?

#python #networkx #pygraphviz

#python #networkx #pygraphviz

Вопрос:

У меня возникли проблемы при попытке увеличить расстояние между узлами в иерархическом графике, который я создаю. Я рассчитываю разместить метки на этом графике, поэтому расстояние между узлами должно быть довольно большим, но я не уверен, как работает параметр «args» pygraphvis_layout или правильно ли я его использую.

Кажется, что расстояние между узлами одного ранга должно составлять не менее 2 дюймов, но это не отражается на реальных изображениях. Изменение числа, предоставленного nodesep, не влияет на расстояние, насколько я тестировал.

Я уже просмотрел другие решения: 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 аргумент должен сработать.