我想与我的主程序同时运行 FuncAnimation ,不幸的是,它阻止了MainProgram我所做的任何事情的执行。
我试过了:
plt.show(block=False)程序继续,但绘图显示空白MainProgram被阻止MainProgram运行但绘图窗口为空白我知道这个问题,但是,我认为考虑到动画的使用,所提供的解决方案是不合适的。
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()
Run Code Online (Sandbox Code Playgroud)
小智 6
解决此问题的最通用方法是使用多处理模块。
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from multiprocessing import Process
import numpy as np
import time
def runGraph():
# Parameters
print('show')
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__':
p = Process(target=runGraph)
p.start()
MainProgram()
p.join()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4485 次 |
| 最近记录: |