spyder上的Matplotlib动画python输出单张图片

Matplotlib animation on spyder python output a single image

我想在 spyder 中制作动画,但我只得到一个静态图。这是代码。

import numpy as np
import matplotlib.pyplot as plt

plt.figure(1) 
plt.clf() 
plt.axis([-10,10,-10,10]) 
n=10 
pos=(20*np.random.sample(n*2)-10).reshape(n,2) 
vel=(0.3*np.random.normal(size=n*2)).reshape(n,2) 
sizes=100*np.random.sample(n)+100 
colors=np.random.sample([n,4]
circles=plt.scatter(pos[:,0], pos[:,1], marker='o', s=sizes, c=colors) 
for i in range(100):
   pos=pos+vel
   bounce=abs(pos)>10 
   vel[bounce] = -vel[bounce] 
   circles.set_offsets(pos) 
   plt.draw() 
   plt.show() 

这就是我得到的,我已经尝试使用 %matplotlib qt5 但它不会改变输出并且保持不变1]1

要使动画正常运行,您需要做两件事。

  • 首先,你需要在制作动画后显示图形,所以 plt.show() 应该跳出 for 循环。
  • 此外,为了能够看到帧,您需要在它们之间放置少量时间,这可以通过添加例如 plt.pause(t)t 以秒为单位)来实现在帧之间。

下面显示的代码是生成动画情节的编辑代码。

import numpy as np
import matplotlib.pyplot as plt

plt.figure(1)
plt.clf()
plt.axis([-10,10,-10,10])
n=10
pos=(20*np.random.sample(n*2)-10).reshape(n,2)
vel=(0.3*np.random.normal(size=n*2)).reshape(n,2)
sizes=100*np.random.sample(n)+100
colors=np.random.sample([n,4])
circles=plt.scatter(pos[:,0], pos[:,1], marker='o', s=sizes, c=colors)
for i in range(100):
   pos=pos+vel
   bounce=abs(pos)>10
   vel[bounce] = -vel[bounce]
   circles.set_offsets(pos)
   plt.draw()
   plt.pause(0.05)
plt.show()