【问题标题】:Matplotlib animation on spyder python output a single imagespyder python上的Matplotlib动画输出单个图像
【发布时间】:2023-03-31 17:11:02
【问题描述】:

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

【问题讨论】:

    标签: python matplotlib spyder


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 2016-06-21
      • 1970-01-01
      相关资源
      最近更新 更多