Искам да анимирам процес на графика (за предпочитане в NetworkX). Вече видях този въпрос. Въпреки това, когато стартирам кода, даден в решението, просто виждам крайния резултат. Също така, това не записва анимацията в някакъв използваем формат.
Да предположим, че имаме следната графика:
import networkx as nx
g = nx.Graph()
g.add_edges_from([(1, 2), (2, 3), (1, 3), (1, 4), (3, 4), (4, 5), (5, 9), (4, 9)])
Освен това имаме първоначален набор от възли, които наричаме активни:
active = {1, 3}
Интуитивно, това, което искам да направя, е да анимирам как всеки активен възел ще накара други възли в графиката да станат активни във времето. Така че, ако приемем модел, при който всеки възел става активен, ако поне два от неговите съседи станат активни, във втората итерация наборът от активни възли ще бъде:
active = {1, 3, 2, 4}
В следващата итерация наборът от активни възли ще бъде:
active = {1, 3, 2, 4, 5}.
В последната итерация всички възли в графиката ще станат активни:
active = {1, 3, 2, 4, 5, 9}
Този процес, който се нарича процес на преобръщане, е пример за разпространение на информация в мрежите. Можете да видите много проста реализация на алгоритъма по-долу.
def tipping(graph, seed_set, thr=2):
active = seed_set
has_changed = False
for n in filter(lambda n: n not in active, graph.nodes()):
if len(filter(lambda nei: nei in active, graph.neighbors(n))) >= thr:
active.add(n)
has_changed = True
if has_changed:
return tipping(graph, active, thr) | active
return active
Искам да знам дали има някакъв начин, по който мога да визуализирам този процес. Знам, че мога да начертая мрежата с функцията nx.draw()
в networkX. Въпреки това не съм виждал никаква функция, която произвежда анимации или друг полезен изход за този сценарий.
Едно възможно решение може да бъде да начертаете графиката във всяка стъпка от процеса с различни цветове на възлите, да запазите всеки от тях и да направите gif анимация с всички запазени снимки.
Как мога да анимирам дифузията с помощта на Networkx? За предпочитане е анимацията да се изпълнява в IPython тетрадка.