由于整整一天的反复试验,我将调查结果发布给任何可能遇到此问题的人。
在过去的几天里,我一直在尝试模拟netCDF文件中某些雷达数据的实时情节,以便与我正在为学校项目建立的GUI一起工作。我尝试的第一件事是使用matplotlib的“交互模式”简单地重绘数据,如下所示:
import matplotlib.pylab as plt
fig = plt.figure()
plt.ion() #Interactive mode on
for i in range(2,155): #Set to the number of rows in your quadmesh, start at 2 for overlap
plt.hold(True)
print i
#Please note: To use this example you must compute X, Y, and C previously.
#Here I take a slice of the data I'm plotting - if this were a real-time
#plot, you would insert the new data to be plotted here.
temp = plt.pcolormesh(X[i-2:i], Y[i-2:i], C[i-2:i])
plt.draw()
plt.pause(.001) #You must use plt.pause or the figure will freeze
plt.hold(False)
plt.ioff() #Interactive mode off
虽然这在技术上有效,但它也会禁用缩放功能,以及平移,以及所有内容!
对于雷达显示图,这是不可接受的。请参阅下面的解决方案。
答案 0 :(得分:3)
所以我开始研究matplotlib动画API,希望找到一个解决方案。虽然它在切片中使用QuadMesh对象并没有完全记录,但动画确实是我正在寻找的。这就是我最终想出来的:
import matplotlib.pylab as plt
from matplotlib import animation
fig = plt.figure()
plt.hold(True)
#We need to prime the pump, so to speak and create a quadmesh for plt to work with
plt.pcolormesh(X[0:1], Y[0:1], C[0:1])
anim = animation.FuncAnimation(fig, animate, frames = range(2,155), blit = False)
plt.show()
plt.hold(False)
def animate( self, i):
plt.title('Ray: %.2f'%i)
#This is where new data is inserted into the plot.
plt.pcolormesh(X[i-2:i], Y[i-2:i], C[i-2:i])
请注意,blit必须为False!否则,它会向你大吼大叫QuadMesh对象不是“可迭代”的。
我还没有访问雷达,所以我无法对实时数据流进行测试,但对于静态文件,它迄今为止运行良好。在绘制数据时,我可以使用动画进行缩放和平移。
祝你好运动画/策划野心!