36

アニメーションに関するこの素晴らしい短いチュートリアルを見つけました:

http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/

ただし、同じ方法でアニメーション化された imshow() プロットを作成することはできません。いくつかの行を置き換えようとしました:

# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(0, 10), ylim=(0, 10))
#line, = ax.plot([], [], lw=2)
a=np.random.random((5,5))
im=plt.imshow(a,interpolation='none')
# initialization function: plot the background of each frame
def init():
    im.set_data(np.random.random((5,5)))
    return im

# animation function.  This is called sequentially
def animate(i):
    a=im.get_array()
    a=a*np.exp(-0.001*i)    # exponential decay of the values
    im.set_array(a)
    return im

エラーが発生しましたが、これを実行するのを手伝ってもらえますか? 前もって感謝します。一番、

4

2 に答える 2

33

あなたは非常に近いですが、1つの間違いがありinitます.アニメーション化されているアーティストを含むイテラブルanimateを返す必要があります. そのため、Jake のバージョンでは(単一行オブジェクト)ではなく (実際にはタプル)を返します。悲しいことに、ドキュメントはこれについて明確ではありません!line,line

次のようにバージョンを修正できます。

# initialization function: plot the background of each frame
def init():
    im.set_data(np.random.random((5,5)))
    return [im]

# animation function.  This is called sequentially
def animate(i):
    a=im.get_array()
    a=a*np.exp(-0.001*i)    # exponential decay of the values
    im.set_array(a)
    return [im]
于 2013-06-20T12:07:55.040 に答える
18

完全な例を次に示します。

# Usually we use `%matplotlib inline`. However we need `notebook` for the anim to render in the notebook.
%matplotlib notebook

import random
import numpy as np

import matplotlib
import matplotlib.pyplot as plt

import matplotlib.animation as animation


fps = 30
nSeconds = 5
snapshots = [ np.random.rand(5,5) for _ in range( nSeconds * fps ) ]

# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure( figsize=(8,8) )

a = snapshots[0]
im = plt.imshow(a, interpolation='none', aspect='auto', vmin=0, vmax=1)

def animate_func(i):
    if i % fps == 0:
        print( '.', end ='' )

    im.set_array(snapshots[i])
    return [im]

anim = animation.FuncAnimation(
                               fig, 
                               animate_func, 
                               frames = nSeconds * fps,
                               interval = 1000 / fps, # in ms
                               )

anim.save('test_anim.mp4', fps=fps, extra_args=['-vcodec', 'libx264'])

print('Done!')

# plt.show()  # Not required, it seems!
于 2019-07-29T18:18:38.870 に答える