当动态发送数据到绘图中移动一个散点后,FuncAnimation没有响应。

问题描述 投票:0回答:1

所以我使用matplotlib的FuncAnimation,所以当一些数据从串口到达时,动态地绘制一些数据(在我的项目中是来自dronekit的车辆类,用绿点显示),我基本上是调用的动画,每一次循环都是接收一个新的车辆类,数据发生变化,所以可以绘制。但由于某些原因,它绘图,但几秒钟后,任务的线程(允许 "刷新 "车辆数据,它弹出并杀死python(死亡之轮),这是我得到的。

enter image description here

我在FuncAnimation开始运行时被调用的函数里放了一些跟踪打印,看起来是这样的。

def droneAnimation(i, vehicle, droneScatter):
     time.sleep(1)
     lat = [vehicle.location.global_relative_frame.lat]
     lon = [vehicle.location.global_relative_frame.lon]
     alt = [vehicle.location.global_relative_frame.alt]
     print("Alt received: " + str(alt))
     droneScatter._offsets3d = (lat,lon,alt)
     print("Changed pos")

正如你所看到的,这些指纹在前几秒被触发,但在反复几次之后还是会崩溃。 FuncAnimation的调用是这样的:

        fig,droneScatter = plotLiveSimpleFacade(vehicle,w,2)
        ani = FuncAnimation(fig,droneAnimation, fargs = (vehicle,droneScatter))
        plt.draw()
        plt.pause(0.1)
        m = threading.Thread(target=MissionStart(vehicle,hmax) , name = "MISSION")
        m.start()

参考: fig是一个plt.fig(),droneScatter只是一个散点,vehicle是车辆类,包含动态更新的数据,MissionStart线程只是一个线程,使车辆类随时间变化。

我还想说的是,fig是在交互模式下开启的,轴的限制设置得很好(我看到当你动态改变数据但不缩放轴可能会有问题)另外,尝试plt.draw()和plt.plot.plot(block = False)的不同组合,导致我根本没有绘制或只是空白图。

由于我不知道是什么原因造成的,所以我将把 dronekit 标签放在这个和线程上,看看是否有人有任何想法!所以我使用 FuncAnalysis(FuncAnalysis)来解决这个问题。

matplotlib animation python-multithreading mplot3d dronekit
1个回答
0
投票

我看了一下matplotlib的线程,看起来用这个库的线程并不是最好的,因为它不是线程安全的,最好的办法是看一下用python的多处理,或者用不同的方式来处理这个问题。岗位

© www.soinside.com 2019 - 2024. All rights reserved.