我的Python项目有问题。现在我正在使用Arduino和matplotlib的pyserial进行实时图形绘制。我想将Arduino的温度传感器数据绘制成实时图形。在我得到数据后,我想在关闭显示的图形后继续执行其他行代码。在这种情况下,我想在关闭图形显示后打印“ok”。下面是我使用的代码:
import serial
import matplotlib.pyplot as plt
import time
plt.ion()
fig=plt.figure()
i=0
x1=list()
y1=list()
isrun = True
ser = serial.Serial('COM3',9600)
i=0
ser.close()
ser.open()
run = True
while True:
data1 = ser.readline()
print(data1.decode())
x1.append(i)
y1.append(data1.decode())
plt.plot(x1, y1)
plt.title('Temperature')
i += 1
plt.pause(0.005)
plt.show(block=False)
# if plt.close() :
# run= False
# ser.close()
# break
print('ok')
在这种情况下,关闭实时图表后,我无法打印“Ok”。即使在我关闭它之后,它仍然会继续显示图表。他们似乎一直在循环。我无法找到一种方法来打破循环并继续下一行代码。如何打破这种情况下的循环并继续打印'ok'。希望有人能帮忙。
2条答案
按热度按时间a7qyws3x1#
您必须使用fig.canvas.mpl_connect()捕获按键事件
在这种情况下,它在任何键事件之后中断循环,您可以定义一个指定键来中断循环或采取某些操作。
this question是关于鼠标点击事件的,但你会发现更多有用的信息。
dkqlctbz2#
close event
更适合你的任务。由于plt.pasue()
也会触发此事件,因此您可以使用其他命令来更新您的图形。其逻辑是:首先画一个图,不要关闭它。在每次迭代中,您只需更新数据并重新绘制它。这比每次迭代中的显示/关闭图形更快。
但是,如果您想使绘图与COM 3事件同步,这仍然是困难的,因为仍然会有延迟。
您可以参考Fast Live Plotting in Matplotlib / PyPlot以使更新更快。
以下是我的demo: