如何在Python中使用matplotlib.animation保持X轴移动并显示最近的数据?

enxuqcxy  于 2022-11-15  发布在  Python
关注(0)|答案(1)|浏览(219)

我是python 3的新手,目前正在学习一些关于动画的知识。matplotlib中的FuncAnimation。我写了一个小程序来绘制CPU使用率随时间的变化。然而,随着绘制的数据越来越多,图形向左压缩。我希望x轴的值随着数据的更新而不断移动。我认为这个问题在这里被提出:Updating the x-axis values using matplotlib animation。但是,我不能很好地遵循它。我想实现这样的东西

如果有人能帮我这个就太好了。谢谢!
下面是我的代码:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import psutil
%matplotlib widget
fig = plt.figure()
ax1 = fig.add_subplot(111)

cpu = []
def animate(i):
    cpu.append(psutil.cpu_percent())

    ax1.clear()
    ax1.plot(cpu)

ani = animation.FuncAnimation(fig, animate, interval = 1000)
plt.show()

使用Jupyter实验室1.0.7
macOS 10.15操作系统

pdsfdshx

pdsfdshx1#

看起来您像是陷入了90%询问动画和matplotlib的人一样的陷阱,因为您在迭代的每一步都重复调用plot(),而不是更新现有属性。
动画的一般程序为:

  • 创建不需要更新的地物和所有固定图元
  • 创建需要更新的艺术家,并保留对他们的引用
  • 在循环中,更新(而不是替换或创建新的艺术家)上一步中创建的艺术家的属性。

密码:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import psutil

N = 50 # number of points to keep
cpu = np.full(shape=(N,), fill_value=np.nan)

fig, ax = plt.subplots()
line, = ax.plot(cpu, 'r-')
ax.set_ylim(0,100)
ax.set_xlim(0,N)

def animate(i):
    cpu[:-1] = cpu[1:] # shift values one place to the left
    cpu[-1] = psutil.cpu_percent()
    line.set_ydata(cpu)

ani = animation.FuncAnimation(fig, animate, interval = 1000)

相关问题