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()
我想在 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()