python - matplotlib 在交互式绘图后没有响应
问题描述
我正在使用带有 python 的 Arduino 进行项目,我正在使用库(pyfirmata,matplot,现在绘制)从 Arduino 绘制实时传感器数据,我得到了实时输出,但是在固定迭代之后,这个数字没有响应。我附上了下面的代码
import pyfirmata
import time
import matplotlib.pyplot as plt
from drawnow import *
import sys
board = pyfirmata.Arduino('COM8')
iter8 = pyfirmata.util.Iterator(board)
iter8.start()
LED = board.get_pin('d:13:o')
ldr=board.get_pin('a:0:o')
val=0
converted=1023
converted2=5.0/1023.0
s=[]
i=0
def makeFig():
plt.figure(1)
plt.ion()
plt.plot(s)
plt.title('My Live Streaming Sensor Data') # Plot the title
plt.grid(True)
while(i<=50):
time.sleep(0.01)
val=ldr.read()
print(val * converted * converted2)
s.append(val)
i=i+1
drawnow(makeFig) # Call drawnow to update our live graph
plt.pause(.000001)
plt.show()
我想在一些迭代后保存传感器绘图,这是我的最终目标
解决方案
你可能想打电话plt.ioff()
之前plt.show()
。
更一般地说,最好完全在事件循环内工作,如下所示。
import pyfirmata
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
board = pyfirmata.Arduino('COM8')
iter8 = pyfirmata.util.Iterator(board)
iter8.start()
LED = board.get_pin('d:13:o')
ldr=board.get_pin('a:0:o')
val=0
converted=1023
converted2=5.0/1023.0
s=[]
i=0
fig, ax = plt.subplots()
line,= ax.plot([],[])
def update(i):
val=ldr.read()
print(val * converted * converted2)
s.append(val)
line.set_data(range(len(s)), s)
ax.autoscale()
ax.relim()
ax.autoscale_view()
FuncAnimation(fig, update, frames=50, repeat=False)
plt.show()
推荐阅读
- azure - 在 Azure AKS 中创建内部混合协议负载均衡器
- python - Django 3 - 没有声明显式 app_label 并且不在 INSTALLED_APPS 中的应用程序中
- python - 文本标签并向 python matplotlib.pyplot.imshow 添加行
- selenium-webdriver - Python Selenium 通过链接文本问题查找
- php - 来自 snappy bundle 的 Swiftmailer pdf 附件
- amazon-web-services - cloudformation ecs force new deployement
- survey - 在 Stack Overflow 网站内找到“2019 年开发者调查结果”调查的路径是什么?
- .net - 无法在 .Net 4.6.1 上使用 Log4Net 安装 Sentry
- exoplayer - 通过 Azure 媒体服务下载受 WideVine/FairPlay 保护的内容以供离线播放
- time-complexity - 优化的字谜函数的时间复杂度