致命的Python错误:PyEval_恢复线程:空tstate、实时数据图、matplotlib、python

ioekq8ef  于 2022-11-15  发布在  Python
关注(0)|答案(1)|浏览(151)

我目前正在设法用matplotlib和python显示更新的实时数据。
但我看到了错误。
我代码:

plt.rcParams['animation.html'] = 'jshtml'
    fig = plt.figure()
    ax = fig.add_subplot(111)
    fig.show()

    i = 0
    plot_x , plot_y = [], []

    while True :

        ###some code to get live updating x_in_data###

        x_in_data = np.reshape(x_in, (1))

        print(x_in_data)

        plot_x.append(i)
        plot_y.append(x_in_data[0])
        ax.plot(plot_x, plot_y, color='b')
        fig.canvas.draw()

        ax.set_xlim(left=max(0, i-50), right= i+50)

        time.sleep(0.1)
        i += 1

我看到以下错误消息:

致命的Python错误:PyEval_恢复线程:空tstate
Python运行时状态:已初始化
当前线程0x 00004 fc 4(最近调用优先):

它实际上绘制了一个小的图形窗口,但不工作。
我在网上找到的每一个解决方案都不适合我的案子。
我想知道是否是值如何更新的问题:
数据值实际上是用换行符更新的,
【-18.75235738】
【-19.02642986】
【-18.75235738】
【-19.02642986】
【-18.75235738】
【-19.02642986】
【-18.92591474】
【-18.75235738】
就像这样,它并不是通过改变自己来更新的
我想知道是否与更新方法有关。
或者我也想知道它有一个有效的方法来绘制“新线更新值”。

yacmzcpb

yacmzcpb1#

在***fig.convas.draw()*之后添加fig. canvas.flush_events()**可以解决这个问题。

# ==========Working sample of your code===========
import matplotlib.pyplot as plt
import time
import numpy as np

plt.rcParams['animation.html'] = 'jshtml'
fig = plt.figure()
ax = fig.add_subplot(111)
fig.show()

i = 0
plot_x, plot_y = [], []

while True:
    ###some code to get live updating x_in_data###

    x_in_data = np.reshape(10, (1))

    print(x_in_data)

    plot_x.append(i)
    plot_y.append(x_in_data[0])
    ax.plot(plot_x, plot_y, color='b')
    fig.canvas.draw()

    ax.set_xlim(left=max(0, i - 50), right=i + 50)
    fig.canvas.flush_events()
    time.sleep(0.1)
    i += 1

参考来源:https://pythonguides.com/matplotlib-update-plot-in-loop/

相关问题