非阻塞Matplotlib动画

时间:2018-08-21 12:55:14

标签: python matplotlib

我想在我的主程序中同时运行一个FuncAnimation,不幸的是,无论我做什么,它都会阻止MainProgram的执行。

我尝试过:

  1. plt.show(block=False)程序继续,但情节显示为空白
  2. 返回动画并存储在变量中-MainProgram被阻止
  3. 两者:MainProgram运行,但绘图窗口为空白

我知道这个问题,但是,我认为考虑到动画的使用,提出的解决方案是不合适的。 Plotting in a non-blocking way with Matplotlib

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
import time

def runGraph():
    # Parameters
    x_len = 200         # Number of points to display
    y_range = [10, 40]  # Range of possible Y values to display

    # Create figure for plotting
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    xs = list(range(0, 200))
    ys = [0] * x_len
    ax.set_ylim(y_range)

    # Create a blank line. We will update the line in animate
    line, = ax.plot(xs, ys)

    # Add labels
    plt.title('TMP102 Temperature over Time')
    plt.xlabel('Samples')
    plt.ylabel('Temperature (deg C)')

    # This function is called periodically from FuncAnimation
    def animate(i, ys):

        # Read temperature (Celsius) from TMP102
        temp_c = np.random.random(1)*40

        # Add y to list
        ys.append(temp_c)

        # Limit y list to set number of items
        ys = ys[-x_len:]

        # Update line with new Y values
        line.set_ydata(ys)

        return line,

    # Set up plot to call animate() function periodically
    ani = animation.FuncAnimation(fig,
        animate,
        fargs=(ys,),
        interval=50,
        blit=True)
    plt.show()

def MainProgram():
     while 1:
         print('Main program')
         time.sleep(0.5)

if __name__ == '__main__':
    runGraph()
    MainProgram()

0 个答案:

没有答案