作者nicha115 (cha)
看板Python
标题[问题] 请问使用plt.ion / plt.ioff
时间Fri Nov 22 22:19:32 2019
各位高手好,
我目前要画一个即时数据的动画
本来要使用animation套件
可是因为我的数据是一直要重新读取的
所以我使用plt.ion / plt.ioff的方法
加上使用多线程(threading)方式
可是呢,
画图会严重lag
想请问是我使用多线程正常?
还是我的程式码有问题呢?
i = 0
obs = Observer() # 这个是建立监控物件,用途是监控一个资料架新生成之file
obs2 = Observer() # 同上
wat = FileWatcher() # 监控用途之一
wat2 = FileWatcher2()
obs.schedule(wat, path=f'{file_path}/{toDay}')
obs2.schedule(wat2, path=f'{file_path2}/{toDay}')
obs.start() # Start watching (一个线程)
obs2.start()
try:
fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)
plt.ion()
while True:
ax.clear()
ax2.clear()
if len(data) <300:
y1 = data['AI_0 PEgF'][:]
y2 = data['AI_1 PEgF'][:]
y3 = data['AI_2 PEgF'][:]
yy1 = data2['AI_0 PEgF'][:]
yy2 = data2['AI_1 PEgF'][:]
yy3 = data2['AI_2 PEgF'][:]
x = np.arange(0, len(data))/600
xx = np.arange(0, len(data2))/600
ax.plot(x, y1)
ax.plot(x, y2)
ax.plot(x, y3)
ax2.plot(xx, yy1)
ax2.plot(xx, yy2)
ax2.plot(xx, yy3)
plt.pause(0.1)
#i += 1
else:
x = data.iloc[-300:].index.values/600
y1 = data['AI_0 PEgF'][-300:]
y2 = data['AI_1 PEgF'][-300:]
y3 = data['AI_2 PEgF'][-300:]
xx = data2.iloc[-300:].index.values/600
yy1 = data2['AI_0 PEgF'][-300:]
yy2 = data2['AI_1 PEgF'][-300:]
yy3 = data2['AI_2 PEgF'][-300:]
ax.plot(x, y1)
ax.plot(x, y2)
ax.plot(x, y3)
ax2.plot(xx, yy1)
ax2.plot(xx, yy2)
ax2.plot(xx, yy3)
plt.pause(0.1)
if len(data) > 1000:
data = data[-300:]
data2 = data2[-300:]
i += 1
plt.ioff()
plt.show()
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.116.197.55 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1574432374.A.00A.html
※ 编辑: nicha115 (122.116.197.55 台湾), 11/22/2019 22:21:44
※ 编辑: nicha115 (122.116.197.55 台湾), 11/23/2019 21:27:11
1F:推 andy086: 虽然我没用过这个,但会lag会不会是记忆体不够啊? 11/24 13:29
2F:→ nicha115: 我也搞不太清楚。但我觉得我数据量也不算大 11/24 17:05
3F:→ nicha115: 试过单独画图(不开线程读file和data)速度正常 11/24 17:07
4F:→ nicha115: 我第一次使用threading概念,不知是否用得不好 11/24 17:07