2017-02-04 8 views
0

Есть ли способ анимации графика в matplotlib, не прибегая к встроенным функциям анимации? Я нахожу их чрезвычайно неудобными в использовании и чувствую, что было бы намного проще просто построить точку, вытереть график, а затем построить следующую точку.Анимация с помощью matplotlib без функции анимации

я себе что-то такое, как:

def f(): 
    # do stuff here 
    return x, y, t 

t, где каждый будет другой кадр.

Я имею в виду, я пробовал такие вещи, как использование plt.clf(), plt.close() и т. Д., Но ничего не работает.

ответ

2

Обязательно анимировать без FuncAnimation. Однако цель «eniviseded function» не совсем ясна. В анимации время является независимой переменной, то есть для каждого временного шага вы создаете некоторые новые данные для построения или аналогичные. Поэтому в качестве входа функция примет t и вернет некоторые данные.

import matplotlib.pyplot as plt 
import numpy as np 

def f(t): 
    x=np.random.rand(1) 
    y=np.random.rand(1) 
    return x,y 

fig, ax = plt.subplots() 
ax.set_xlim(0,1) 
ax.set_ylim(0,1) 
for t in range(100): 
    x,y = f(t) 
    # optionally clear axes and reset limits 
    #plt.gca().cla() 
    #ax.set_xlim(0,1) 
    #ax.set_ylim(0,1) 
    ax.plot(x, y, marker="s") 
    ax.set_title(str(t)) 
    fig.canvas.draw() 
    plt.pause(0.1) 

plt.show() 

Кроме того, не понятно, почему вы хотели бы избежать FuncAnimation. Же анимация, как описано выше, может быть получена с FuncAnimation следующим образом:

import matplotlib.pyplot as plt 
import matplotlib.animation 
import numpy as np 

def f(t): 
    x=np.random.rand(1) 
    y=np.random.rand(1) 
    return x,y 

fig, ax = plt.subplots() 
ax.set_xlim(0,1) 
ax.set_ylim(0,1) 

def update(t): 
    x,y = f(t) 
    # optionally clear axes and reset limits 
    #plt.gca().cla() 
    #ax.set_xlim(0,1) 
    #ax.set_ylim(0,1) 
    ax.plot(x, y, marker="s") 
    ax.set_title(str(t)) 

ani = matplotlib.animation.FuncAnimation(fig, update, frames=100) 
plt.show() 

Там значительно не изменился, то есть такое же количество строк, ничего на самом деле неудобно посмотреть здесь.
Кроме того, у вас есть все преимущества от FuncAnimation, когда анимация становится более сложной, когда вы хотите повторить анимацию, когда хотите использовать blitting, или когда вы хотите экспортировать его в файл.