Matplotlib анимация init_func первый кадр - PullRequest
0 голосов
/ 17 декабря 2018

Я хотел бы создать анимацию, которая показывает, как структура сети меняется со временем.Я использую 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 enter image description here

frame2 enter image description here

frame3 enter image description here

frame4 enter image description here

ЧтоЯ хочу, чтобы первый кадр выглядел следующим образом (именно это нарисовано в функции init ())

enter image description here

Я знаю это точноэтот init () вызывается, потому что в нем устанавливаются глобальные переменные left, right, top и bottom.Но почему рисунок, созданный в этой функции, не добавляется в финальную анимацию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...