I'd like to run a FuncAnimation concurrently to my main program, unfortunately, it's blocking the execution of MainProgram
whatever I do.
I've tried:
plt.show(block=False)
program continues but plot shows blank- Returning the animation and storing in a variable -
MainProgram
is blocked - Both:
MainProgram
runs but plot window is blank
I am aware of this question, however, I assume that given the use of Animation the solutions presented aren't appropriate.
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()