Добавление гравитации в сеть x.spring_layout - PullRequest
1 голос
/ 26 апреля 2019

Я бы хотел добавить понятие "гравитация" к networkx.spring_layout. Причина в том, что у меня есть DAG, которую я хотел бы разметить, и у Graphviz много проблем с этим. Начальные эксперименты с spring_layout кажутся положительными, но я хотел бы обеспечить более или менее стабильную компоновку, применяя постоянную силу ко всем узлам (конечно, уменьшая каждую итерацию с температурой). Это должно эффективно «взорвать» все узлы в одном или другом направлении, при этом корень будет закреплен в одном месте.

Но, прежде чем начать, мне было интересно, был ли это разумный способ достичь того, чего я хочу.

1 Ответ

1 голос
/ 27 апреля 2019

Graphviz имеет несколько программ для построения графиков, каждая из которых лучше подходит для некоторых типов графиков Стандартная программа используется в сети x neato. Но есть одна программа, которая намного лучше для ориентированных графов, особенно DAG - dot. Просто посмотрите на neato вывод:

nx.draw(G, pos=nx.nx_pydot.graphviz_layout(G))

enter image description here

и для dot вывода:

nx.draw(G, pos=nx.nx_pydot.graphviz_layout(G, prog='dot'))

enter image description here

Я настоятельно рекомендую вам использовать graphviz_layout с prog='dot'. Но если вы хотите использовать стандарт spring_layout, вам следует использовать параметр k. Пружинная компоновка не имеет параметра гравитации , но k является таким:

k (float (default=None)) – Optimal distance between nodes. If None the distance is set to 1/sqrt(n) where n is the number of nodes. Increase this value to move nodes farther apart.

Вы также можете попробовать изменить scale:

scale (number (default: 1)) – Scale factor for positions. Not used unless fixed is None.

и seed для детерминированных графиков:

seed (int, RandomState instance or None optional (default=None)) – Set the random state for deterministic node layouts. If int, seed is the seed used by the random number generator, if numpy.random.RandomState instance, seed is the random number generator, if None, the random number generator is the RandomState instance used by numpy.random.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...