【问题标题】:Fatal Python error: PyEval_RestoreThread: NULL tstate , live data plot , matplotlib, python致命的 Python 错误:PyEval_RestoreThread: NULL tstate,实时数据图,matplotlib,python
【发布时间】:2022-10-14 23:05:44
【问题描述】:

我目前正在设法使用 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_RestoreThread:NULL tstate

Python 运行时状态:已初始化

当前线程 0x00004fc4(最近的调用优先):

它实际上绘制了一个小图形窗口,但不起作用。

我在互联网上找到的每个解决方案都不适用于我的情况。

我想知道如何更新值是否是问题:

数据值实际上是用换行符更新的,

[-18.75235738]

[-19.02642986]

[-18.75235738]

[-19.02642986]

[-18.75235738]

[-19.02642986]

[-18.92591474]

[-18.75235738]

像这样,它是不是通过改变自身来更新。

我想知道它是否与更新方法有关。

或者我也想知道有一种有效的方法来绘制“新行更新值”。

【问题讨论】:

    标签: python matplotlib plot live updating


    【解决方案1】:

    添加fig.canvas.flush_events()fig.canvas.draw()解决了这个问题。

    # ==========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/

    【讨论】:

      最近更新 更多