粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

Python Figureの管理と動画作成についてメモ

Python覚えてたてマンなのでFigureの管理について。
使用するのはMatplotlibです。

使うパッケージ

matplotlibを主につかっていきます。

import matplotlib.pyplot as plt                   #   for plotting data
import matplotlib.animation as animation          #   for animation data

関数の定義と引数の返し方について

Pythonではdefのところで引数について書かないっぽいです。
代わりに一番下にreturnを書くことで引数を返せます。

1.plot関数からハンドルを出力させるようにする。

前の記事では以下のようなplot関数を書いていましたが,こいつが使いづらかった原因は出力を指定していなかったからですね。
plt.figureで出力した図のハンドルをreturnするようにするのが実用的でしょう。

def draw(i,observations):
    fig = plt.figure(i,figsize=(8, 8))
    sp = fig.add_subplot(111, aspect='equal')
    sp.set_xlim(-1.0,1.0)
    sp.set_ylim(-0.5,1.5)

    robot.draw(sp,observations)
    
    actual_landmarks.draw()

    plt.legend()
    
    return fig

2.出力されたハンドルを配列で保持

次に,出力されたハンドルを配列へと格納します。
ims=[] みたいな感じで初期化して,.append()というのを使って要素を追加できます。

従って以下のような流れになります。

ims = [] #初期化

for i in range(0,18):
    im = draw(i,None)             #描画関数
    ims.append(im)                #格納
    robot.move(0.2,math.pi / 180.0 * 20) #ここはまぁ気にするな

3.まとめてplot

imsに配列で全ての図を保存したので,plt.show()に具体的なハンドルを与える事ができます。
まとめてやるなら配列ごと突っ込むのが良いでしょう。

plt.show(ims)

これで随分心が晴れました。

4.動画にする

結論から言うとうまく行っていません。
なんでも保存するのにまた別のパッケージがいるとかなんとか。
以下のような感じで行けるらしいです。

fig = plt.figure()
ani = animation.ArtistAnimation(fig, ims, interval=1000)
plt.show()