アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2020年10月16日

python:matplot animation

matplotで連続描画

matplotlib.pyplot.pause

【使い方】
matplotlib.pyplot.pause(interval)

interval は更新インターバル[sec]を記載する。 公式ページ
matplotでアニメーション作成

pythonのmatplotを利用した描画アニメーションの作成のメモ
import itertools
import csv
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import psutil
from operator import itemgetter

max_xaxis = 100
with open("../input/image_block_print.csv",mode="r") as _f:
read_data = list(csv.reader(_f))
rect_list = []#[plt.Rectangle((x,y),1,1,fc="red") for x in range(3) for y in range(4)]
for row in read_data:
rect_list.append(plt.Rectangle((int(row[0])*5 + 15,5+int(row[1])*5),5,5,fc=row[2]))
def data_gen():
for cnt in itertools.count():
t = cnt / 10
#yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)
mem = psutil.virtual_memory()
cpu = psutil.cpu_percent()
if t > max_xaxis:
t = round(t % max_xaxis,1)
yield t, cpu#mem.percent

def init():
ax.set_ylim(0, 100)
ax.set_xlim(0, max_xaxis)
del xdata[:]
del ydata[:]
line.set_data(xdata, ydata)
return line,
def init_scatter():
ax.clear()
ax.set_ylim(0, 100)
ax.set_xlim(0, max_xaxis)
ax.axes.xaxis.set_visible(False)
ax.axes.yaxis.set_visible(False)
#ax.grid()
fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.grid()
xdata, ydata = [], []
rect_data = []
def run(data):
# update the data
t, y = data
xdata.append(t)
ydata.append(y)
if len(rect_list) > int(t*10):
rect_data.append(rect_list[int(t*10)])
else:
exit()
if len(xdata) > (max_xaxis * 10):
xdata.pop(0)
ydata.pop(0)
y_res = [x[0] for x in sorted(zip(ydata,xdata), key=lambda x:x[1])]
x_res = sorted(xdata)
xmin, xmax = ax.get_xlim()

if t >= xmax:
#ax.set_xlim(xmin, 2*xmax)
ax.figure.canvas.draw()
init_scatter()
#sct = ax.scatter(x_res,y_res)
for _rec in rect_data:
ax.add_patch(_rec)
#line.set_data(x_res, y_res)

return line,
ani = animation.FuncAnimation(fig, run, data_gen, interval=10, init_func=init, save_count=150)
ani.save('auto.html', writer='pillow')
plt.show()


画像csvは下の形式。
1行目がx座標、2行目はy座標、3行目は塗りつぶし色。

2,1,peru
3,1,peru
4,1,peru
9,1,peru
10,1,peru
11,1,peru
12,1,peru
...


作成動画youtube

https://www.youtube.com/watch?v=hB5TDc66PYw
×

この広告は30日以上新しい記事の更新がないブログに表示されております。

Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: