2016-05-09 1 views
2

Как передать аргументы функции animation()? , Я пробовал, но сработал. прототип animation.FuncAnimation() являетсяПередача аргументов в анимации.FuncAnimation()

класс matplotlib.animation.FuncAnimation (рис, FUNC, кадры = нет, init_func = None, fargs = нет, save_count = нет, ** kwargs) Основы: Matplotlib. анимация.TimedAnimation

Я наклеил код ниже, какие изменения мне нужно сделать?

import matplotlib.pyplot as plt 
import matplotlib.animation as animation 

def animate(i,argu): 
    print argu 

    graph_data = open('example.txt','r').read() 
    lines = graph_data.split('\n') 
    xs = [] 
    ys = [] 
    for line in lines: 
     if len(line) > 1: 
      x, y = line.split(',') 
      xs.append(x) 
      ys.append(y) 
     ax1.clear() 
     ax1.plot(xs, ys) 
     plt.grid() 

ani = animation.FuncAnimation(fig,animate,fargs = 5,interval = 100) 
plt.show() 
+0

Можете ли вы объяснить, что «не работает»? Получили ли вы ответ? – tacaswell

ответ

3

Проверьте этот простой пример:

# -*- coding: utf-8 -*- 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
import numpy as np 

data = np.loadtxt("example.txt", delimiter=",") 
x = data[:,0] 
y = data[:,1] 

fig = plt.figure() 
ax = fig.add_subplot(111) 
line, = ax.plot([],[], '-') 
line2, = ax.plot([],[],'--') 
ax.set_xlim(np.min(x), np.max(x)) 
ax.set_ylim(np.min(y), np.max(y)) 

def animate(i,factor): 
    line.set_xdata(x[:i]) 
    line.set_ydata(y[:i]) 
    line2.set_xdata(x[:i]) 
    line2.set_ydata(factor*y[:i]) 
    return line,line2 

K = 0.75 # any factor 
ani = animation.FuncAnimation(fig, animate, frames=len(x), fargs=(K,), 
           interval=100, blit=True) 
plt.show() 

Во-первых, для обработки данных рекомендуется использовать NumPy, проще читать и писать данные.

Нет необходимости использовать функцию «графика» на каждом этапе анимации, вместо этого используйте методы обновления данных для set_xdata и set_ydata.

Также рассматривает примеры документации Matplotlib: http://matplotlib.org/1.4.1/examples/animation/.

+0

спасибо Jorge для замечательный ответ. Но методы set_xdata и set_ydata не работают, если мы вставляем canvas в форму wxpython. у тебя есть идеи ? – vinaykp

+0

Проверьте эту мини-адаптацию, используя бэкэнд wxPython, который похож на последний пример: [http://pastebin.com/c1WSRRD7](http://pastebin.com/c1WSRRD7) –

+0

спасибо. Я сделал то же самое, что и реализация ur, но я вызвал анимацию(), когда выбран вариант из раскрывающегося списка. Поэтому, когда выбранная опция выбрала функцию раскрывающегося списка, функция animate() выполнялась повторно для каждого заданного времени. Но на экране ничего не отображалось. У вас есть идеи, почему это происходит? – vinaykp

1

Я думаю, что вы очень много там, следующее имеет несколько небольших правок в основном вам нужно определить фигуру, с помощью оси ручки и положить fargs внутри списка,

import matplotlib.pyplot as plt 
import matplotlib.animation as animation 

fig, ax1 = plt.subplots(1,1) 

def animate(i,argu): 
    print(i, argu) 

    #graph_data = open('example.txt','r').read() 
    graph_data = "1, 1 \n 2, 4 \n 3, 9 \n 4, 16 \n" 
    lines = graph_data.split('\n') 
    xs = [] 
    ys = [] 
    for line in lines: 
     if len(line) > 1: 
      x, y = line.split(',') 
      xs.append(float(x)) 
      ys.append(float(y)+np.sin(2.*np.pi*i/10)) 
     ax1.clear() 
     ax1.plot(xs, ys) 
     plt.grid() 

ani = animation.FuncAnimation(fig, animate, fargs=[5],interval = 100) 
plt.show() 

I замените example.txt на жесткую строку, так как у меня не было файла и добавлено в зависимость от i, чтобы сюжет перемещался.