我想要做的是创建一个动画,其中图形的节点随时间改变颜色。当我在 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()
所以我想我可以做这样的事情:
#!/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 = nx.draw(G,pos,with_labels=False,node_color=nc) # this doesn't work
images.append([imgplot])
anim = ArtistAnimation(fig, images, interval=50, blit=True)
anim.save('not-this-one.mp4')
plt.show()
我坚持的是,在使用 nx.draw() 绘制图形之后,我可以获取适当类型的对象以放入传递给 ArtistAnimation 的数组中。在第一个示例中,plt.imshow() 返回 matplot.image.AxesImage 类型的对象,但 nx.draw() 实际上并没有返回任何内容。有没有办法让我得到一个合适的图像对象?
当然,完全不同的方法是受欢迎的(似乎在 matplotlib 中总是有很多不同的方法可以做同样的事情),只要我完成后可以将我的动画保存为 mp4。
谢谢!
——克雷格