我想在图(最好在 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)])
Run Code Online (Sandbox Code Playgroud)
此外,我们有一组初始节点,我们称之为活动节点:
active = {1, 3}
Run Code Online (Sandbox Code Playgroud)
直观地说,我想要做的是动画每个活动节点将如何导致图中的其他节点及时变为活动状态。因此,如果我们假设一个模型,如果每个节点至少有两个相邻节点变为活动节点,则该模型将变为活动节点,在第二次迭代中,活动节点集将是:
active = {1, 3, 2, 4}
Run Code Online (Sandbox Code Playgroud)
在下一次迭代中,活动节点集将是:
active = {1, 3, 2, 4, 5}.
Run Code Online (Sandbox Code Playgroud)
在最后一次迭代中,图中的所有节点都将变为活动状态:
active = {1, 3, 2, 4, 5, 9}
Run Code Online (Sandbox Code Playgroud)
这个过程被称为倾销过程,是网络中信息传播的一个例子。您可以在下面看到该算法的一个非常简单的实现。
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 …Run Code Online (Sandbox Code Playgroud) 我想要做的是创建一个动画,其中图形的节点随时间改变颜色.当我在matplotlib中搜索有关动画的信息时,我通常会看到如下所示的示例:
#!/usr/bin/python
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
fig = plt.figure(figsize=(8,8))
images = []
for i in range(10):
data = np.random.random(100).reshape(10,10)
imgplot = plt.imshow(data)
images.append([imgplot])
anim = ArtistAnimation(fig, images, interval=50, blit=True)
anim.save('this-one-works.mp4')
plt.show()
Run Code Online (Sandbox Code Playgroud)
所以我想我可以这样做:
#!/usr/bin/python
import numpy as np
import networkx as nx
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
G = nx.Graph()
G.add_edges_from([(0,1),(1,2),(2,0)])
fig = plt.figure(figsize=(8,8))
pos=nx.graphviz_layout(G)
images = []
for i in range(10):
nc = np.random.random(3)
imgplot …Run Code Online (Sandbox Code Playgroud)