我希望能在一个图表上进行过程动画(最好使用NetworkX)。我已经看过this question。然而,当我运行解决方案中给出的代码时,我只看到了最终的输出。另外,它没有将动画保存为可用的格式。
假设我们有以下图表:
此外,我们有一个初始节点集,我们称之为活动节点:
直观地说,我想做的是动画演示每个活动节点如何在时间上导致图中其他节点变为活动状态。因此,如果我们假设一个模型,在这个模型中,只有当至少两个邻居节点变为活动状态时,每个节点才会变为活动状态。在第二次迭代中,活动节点集将是:
在下一次迭代中,活动节点集将是:
在最后一次迭代中,图中的所有节点都将变为活动状态:
这个过程被称为“倾斜过程”,是网络中信息扩散的一个例子。您可以在下面看到算法的非常简单的实现。
我想知道是否有任何方法可以将这个过程可视化。我知道可以使用networkX中的
一个可能的解决方案是在每个步骤中以不同的节点颜色绘制图形,保存每个步骤的图像,并使用所有保存的图片制作gif动画。
如何使用Networkx对扩散进行动画处理?最好在IPython笔记本中运行动画。
假设我们有以下图表:
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
我想知道是否有任何方法可以将这个过程可视化。我知道可以使用networkX中的
nx.draw()
函数绘制网络。然而,我没有看到任何可以生成动画或其他有用输出的函数。一个可能的解决方案是在每个步骤中以不同的节点颜色绘制图形,保存每个步骤的图像,并使用所有保存的图片制作gif动画。
如何使用Networkx对扩散进行动画处理?最好在IPython笔记本中运行动画。