Verwenden von NetworkX mit matplotlib.ArtistAnimation

Ich möchte eine Animation erstellen, in der die Knoten eines Diagramms mit der Zeit ihre Farbe ändern. Wenn ich in matplotlib nach Informationen zur Animation suche, sehe ich normalerweise Beispiele, die ungefähr so ​​aussehen:

#!/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()

Also dachte ich, ich könnte einfach so etwas machen:

#!/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()

Ich stelle fest, wie ich nach dem Zeichnen des Graphen mit nx.draw () ein Objekt des entsprechenden Typs in das Array einfügen kann, das an ArtistAnimation übergeben wird. Im ersten Beispiel gibt plt.imshow () ein Objekt vom Typ matplot.image.AxesImage zurück, aber nx.draw () gibt tatsächlich nichts zurück. Gibt es eine Möglichkeit, ein geeignetes Bildobjekt in die Hände zu bekommen?

Ganz andere Ansätze sind natürlich willkommen (es scheint, dass es in matplotlib immer viele verschiedene Möglichkeiten gibt, dasselbe zu tun), solange ich meine Animation als mp4 speichern kann, wenn ich fertig bin.

Vielen Dank!

--craig

Antworten auf die Frage(1)

Ihre Antwort auf die Frage