2014-12-09 7 views
-1

У меня проблема в функции, которая будет использоваться в matplotlib FuncAnimation.Оператор возврата Python в функции PlotAnimation

Я знаю, что это не 100% связано с кодом PlotAnimation. Это больше связано с тем, как работает return. Во всяком случае, вот оно:

Мне нужно построить несколько строк на одном графике, но я не знаю заранее, сколько строк. Итак, я создал список участков (так называемый lines) так:

fig = plt.figure() 
ax = plt.axes(xlim=(0, 1), ylim=(0, 1), aspect='equal') 
lines=[]  
for i in range(len(disc)): 
     line, = ax.plot([], [], '-', lw=1.5) 
     lines.append(line) 

Скажем len(disc) равно или больше 3. Если я делаю это:

def animate(i): 
    global disc 
    for i in range(len(disc)): 
     lines[i].set_data(disc[i].x, disc[i].y) 
    return line[0], line[1], line[2] 

anim = animation.FuncAnimation(fig, animate, blit=True) 
plt.show() 

Все работы perfecly (кроме за то, что если len(disc) жадно, чем 3, я пропускаю некоторые строки на графике).

Однако, я не знаю len(disc) заранее. Итак, мой вопрос: Есть ли способ, чтобы использовать что-то вроде этого:

return lines 

(или что-то подобное, я знаю, что выше не работает), заменив оператор возврата в animate функции выше?

ответ

0

Первое, что я могу вспомнить, используя цикл

return lines[0:len(lines)] 
+0

Это должно возвращать 'lines [0]' only. –

+0

Конечно, как глупо. Как насчет 'обратных линий [0: len (lines)]' –

+0

Спасибо, обратные линии [0: len (lines)] отлично работали! –

0

Я не знаю, если я получил это право, так как я не использую matplotlib сам, но из documentation я получил идея.

  1. Почему return lines не работает? Он должен быть равен

    return lines[0], lines[1], ..., lines[len(lines)-1] 
    
  2. Возможно, здесь используется итератор. Ключевое слово yield:

    def def animate(i): 
        global disc 
        for i in range(len(disc)): 
         lines[i].set_data(disc[i].x, disc[i].y) 
        yield from lines # in Python 2.x use: yield iter(lines) 
    

В то время как я не думаю, что это правильный/желаемый способ получил, я не могу думать о другом решении сейчас.

Вам действительно нужно что-то вернуть? В документации не указано требуемое возвращаемое значение.

+0

Спасибо за ответ. К сожалению, это не сработало. Но ответ от @Amrish Lakhisaran - это именно то, что мне нужно. –