Я хотел бы создать анимацию, которая показывает, как структура сети меняется со временем.Я использую Matplotlib, а также Networkx.У меня возникают проблемы с работой следующего игрушечного примера.
Предположим, у меня есть график, который состоит из четырех узлов, соединенных в линию.Я хочу, чтобы моя анимация выполняла следующее: самый первый кадр должен показывать всю линию узлов.После этого в каждом кадре должен отображаться первый узел линии, первые два узла, соединенные в линию и т. Д.
Вот моя первоначальная попытка:
import matplotlib as mpl
mpl.use('agg')
import pylab
import networkx as nx
from matplotlib import animation
G = nx.Graph()
G.add_node(0)
pos = {}
pos[0] = (0, 0)
labels = {}
labels[0] = '0'
for i in xrange(1, 5):
G.add_node(i)
pos[i] = (0, i)
labels[i] = str(i)
G.add_edge(i - 1, i)
fig = pylab.figure()
left = right = top = bottom = None
def init():
nx.draw(G, pos=pos, labels=labels)
ax = pylab.gca()
global left, right, top, bottom
left, right = ax.get_xlim()
bottom, top = ax.get_ylim()
pylab.savefig('network_changes_init.png', format='png')
def redraw(frame):
pylab.clf()
nbunch = range(frame + 1)
D = G.subgraph(nbunch)
pos2 = {}
labels2 = {}
for u in D.nodes():
pos2[u] = pos[u]
labels2[u] = labels[u]
nx.draw(D, pos=pos2, labels=labels2)
pylab.xlim(left, right)
pylab.ylim(bottom, top)
pylab.savefig('network_changes%d.png' % frame, format='png')
ani = animation.FuncAnimation(fig, redraw, init_func=init, frames=4)
ani.save('network_changes.mp4', writer='avconv')
Этот код выполняется без ошибокОднако он не производит анимацию, которую я хочу.Всего должно быть пять кадров: начальный кадр (отрисовывается в соответствии с функцией init ()) и четыре дополнительных кадра (отрисовывается в соответствии с функцией redraw ()).Вместо этого есть только четыре кадра: четыре кадра, нарисованные перерисовкой.Он не рисует начальный кадр, который я хочу.
Вот четыре кадра, которые являются частью анимации
кадр 1
frame2
frame3
frame4
ЧтоЯ хочу, чтобы первый кадр выглядел следующим образом (именно это нарисовано в функции init ())
Я знаю это точноэтот init () вызывается, потому что в нем устанавливаются глобальные переменные left, right, top и bottom.Но почему рисунок, созданный в этой функции, не добавляется в финальную анимацию?