I want to create an animation in which the nodes of the graph change color over time. When I look for animation information in matplotlib, I usually see examples that look something like this:
#!/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()
So, I thought I could just do something like this:
#!/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)
I'm stuck with how, after drawing a graph with nx.draw (), I can get an object of the appropriate type to be placed in the array passed to ArtistAnimation. In the first example, plt.imshow () returns an object of type matplot.image.AxesImage, but nx.draw () actually returns nothing. Is there a way that I can access a suitable image object?
Of course, very different approaches are welcome (there always seem to be many different ways to do the same in matplotlib), as long as I can save my animation as mp4 when done.
Thanks!
- Craig
source share