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()を使っていると線がずれていく(重ならない)問題が生じる。

