python - 如何退出 matplotlib 并在之后继续代码

标签 python matplotlib while-loop real-time pyserial

我的 python 项目有问题。现在我正在使用 pyserial for Arduino 和 matplotlib 进行实时图形绘制。我想将 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”。希望有人能帮忙..

最佳答案

你必须使用fig.canvas.mpl_connect()捕获按键事件

fig = plt.figure()
keep_ploting = True

def on_key(event):
    global keep_ploting 
    keep_ploting = False

while keep_ploting:
    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)
    
    fig.canvas.mpl_connect('key_press_event', on_key)

在这种情况下,它会在任何按键事件后打破循环,您可以定义一个特定的键来打破循环或采取一些操作。

this question是关于鼠标单击事件的,但您会找到更多有用的信息。

关于python - 如何退出 matplotlib 并在之后继续代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64196498/

相关文章:

python - 如何制作一个不重复的列表

python - 如何在 python spyder IDE 中使用相对导入

python - 如何在matplotlib上生成一系列直方图?

Javascript:循环后打开 URL 给出正确答案

php - 虽然每个都已弃用,但 Foreach 替换需要更多时间

c - bool 表达式看似合乎逻辑,但不起作用

python - 使用 python Django 和 Mysql。由于Binlog,数据不会插入MySQL

python - 对象创建后立即调用方法

python - 自定义 y 标签)使用 matlibplot

python - 使用 matplotlib 绘制空间时间