【问题标题】:FuncAnimation doesn't respond when after dynamically sending data to plot to move a scatter point动态发送数据以绘制移动散点后,FuncAnimation 不响应
【发布时间】:2020-04-22 18:34:13
【问题描述】:

所以我使用 matplotlib 中的 FuncAnimation 来动态绘制从串行端口到达的一些数据(在我的项目中是来自dronekit 的车辆类,它用绿点显示),我基本上是动画调用哪个循环正在接收一个新的车辆类,数据已更改,因此可以绘制它,但由于某种原因,它绘制但在任务线程之后几秒钟后(它允许“刷新”车辆数据)弹出并杀死python(死亡之轮),这就是我得到的:

我在 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.figure(),droneScatter只是一个散点,vehicle是包含动态更新数据的载具类,MissionStart线程只是一个让载具类超时变化的线程。

我还想提一下,无花果处于交互模式,并且轴限制设置得很好(我看到当您动态更改数据但不缩放轴时可能会出现问题),尝试不同plt.draw() 和 plt.plot(block = False) 的组合导致我根本不绘制或只是一个空白图。

因为我不知道是什么原因造成的,所以我会在上面贴上dronekit 标签和线程,看看是否有人知道!

【问题讨论】:

    标签: matplotlib animation python-multithreading mplot3d dronekit


    【解决方案1】:

    我已经研究过使用 matplotlib 进行线程化,并且看起来像使用这个所说的库进行线程化并不是最好的,因为它不是线程安全的,最好的办法是使用 python 来查看多处理或以不同的方式解决问题。 你可以在post找到更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多