【问题标题】:Matplotlib animation erase previous data [duplicate]Matplotlib动画擦除以前的数据[重复]
【发布时间】:2019-06-12 14:35:58
【问题描述】:

我正在尝试使用 Matplotlib 制作一个简单的动画,以检查我的模拟是否运行良好。我想看看两个粒子如何在 x-y 平面中移动:如果代码有效,它们应该吸引并在同一点结束或在空间中接近。

我在“for”循环中计算粒子的位置,每次获得位置时,我使用 plt.scatter(x, y) 绘制它们,其中 x 和 y 是时间 t = t + DT。我在网上读到我可以在循环中编写 plt.pause(0.05) ,这将产生我正在寻找的简单动画。

我的代码示例如下:

import numpy as np
import matplotlib.pyplot as plt

for k in range(steps):
    pos = computeNewPos(pos, vel, force)        

    plt.scatter(pos[0, 0], pos[0, 1], label = '1', color = 'r')
    plt.scatter(pos[1, 0], pos[1, 1], label = '2', color = 'b')

    plt.xlabel('X')
    plt.ylabel('Y')

    plt.pause(0.05)

plt.show()

这可行,但我得到的“动画”包含旧数据点,我只想看到更新的位置。这将更容易跟踪粒子的位置。如何在 for 循环中“擦除”每次运行的旧点?有没有办法在每次运行时清除框架?

【问题讨论】:

    标签: python python-3.x matplotlib animation scatter-plot


    【解决方案1】:

    最简单的解决方案(如果可能不是最有效的)是在重绘之前用axis.clear() 擦除轴:

    fig, ax = plt.subplots()
    for k in range(steps):
        pos = computeNewPos(pos, vel, force)
        ax.clear()        
    
        ax.scatter(pos[0, 0], pos[0, 1], label = '1', color = 'r')
        ax.scatter(pos[1, 0], pos[1, 1], label = '2', color = 'b')
    
        ax.xlabel('X')
        ax.ylabel('Y')
    
        plt.pause(0.05)
    
    plt.show()
    

    请注意,我在开始时生成图形和轴(因此它仍然可以在多个窗口打开的情况下工作)。你也可以使用plt.gca().clear() 来清除当前坐标轴,但这对 IMO 来说更脆弱且容易出错。

    【讨论】:

    • 成功了,谢谢!
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多