Pythonでplot遊び
matplotlibとxkcd()を試して遊びをしてみた。
順番にプロットを描いていく例。
from matplotlib import pyplot as plt import matplotlib.animation as animation import numpy as np fig = plt.figure() img = [] plt.xkcd() for a in range(50): item, = plt.plot(np.sin(np.linspace(0, a, num=a*5)), 'r') plt.title('Sinusoidal wave') img.append([item]) ani = animation.ArtistAnimation(fig, img) ani.save('sani.mp4', writer="ffmpeg") plt.show()
ffmpegが必要ならしい。ところでplt.plotを繰り返すと色が順番にかわっていく。
このほかのアニメーションを作るほうほうとしてはplotをメモリ上に書き出していきPILでアニメーションgifにまとめるというもの。
from matplotlib import pyplot as plt import matplotlib.animation as animation import numpy as np from PIL import Image, ImageDraw import io fig = plt.figure() img = [] plt.xkcd() for a in range(50): plt.plot(np.sin(np.linspace(0, a, num=a*5)), 'r') plt.title('Sinusoidal wave') item = io.BytesIO() plt.savefig(item, format='png') item.seek(0) im = Image.open(item) im.show() item.close() img.append(im) im = img[0] im.save('out.gif', save_all=True, append_images=img)
xkcd()を使っていると線がずれていく(重ならない)問題が生じる。