изменение графика графа сети в анимации - PullRequest
0 голосов
/ 28 февраля 2019

после работы над анимацией моей сети networkx мне, наконец, удалось сделать это с помощью matplotlib, но моя сеть изменила свое расположение (расположение узлов и ребер) и, таким образом, моя сеть перестала быть доступной.это более общий вопрос (как я могу остановить мою сеть от изменения в анимации?).Мой вызов анимации выглядит так:

def update(it = None):
    global gG
    global gnodes
    global fig
    tick(gG,gnodes)
    fig.clf()
    nx.draw(gG,with_labels=True,node_color = setColorMap(gG,gnodes))
def draw():
    global fig
    ani = animation.FuncAnimation(fig,update,repeat=True,interval= 1)
    plt.show()

gG - это график, gNode - это словарь узлов, а fig - это цифра. Интервал не должен быть одним, я знаю об этом

enter image description here enter image description here различия в форме

1 Ответ

0 голосов
/ 28 февраля 2019

Проблема в том, что по умолчанию networkx использует алгоритм для размещения узлов, который начинается с размещения узлов в произвольном порядке, а затем смещает их вокруг, как если бы они были массами на конце пружин.Это имеет тенденцию к приличному расположению, но поскольку начальная точка случайна, каждый раз она меняется.

Это легко исправить с помощью аргумента pos.pos - это словарь, в котором хранятся координаты x и y для каждого узла.Вы можете установить их вручную или, проще, вы можете сделать так, чтобы networkx их создавал.

pos = nx.spring_layout(G) #other layouts are available.
nx.draw(G, pos=pos)

Это полезно не только для анимации, но и когда вы хотите, чтобы подмножество узлов отображалось одним цветом идругое подмножество, нанесенное на график в другом.

Вот пример кода для анимации, которую я сделал: https://epidemicsonnetworks.readthedocs.io/en/latest/_modules/EoN/simulation_investigation.html#Simulation_Investigation.animate

и некоторые примеры вывода с использованием этого кода:

https://epidemicsonnetworks.readthedocs.io/en/latest/examples/Simulation_Investigation.html

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