【问题标题】:Matplotlib Animation Not working in SpyderMatplotlib 动画在 Spyder 中不起作用
【发布时间】:2021-11-18 07:27:50
【问题描述】:

我是 matplotlib 新手,正在尝试动画。观看了一些来自 youtube 的教程并在下面创建了代码,这几乎是其中一个教程的复制/粘贴。我期待绘图会不断更新新的数据点,但它没有发生。我添加了打印语句以进行故障排除,发现 xcord 和 ycord 只打印了一次——这意味着似乎根本没有调用 animate 函数。请帮助找出我做错了什么。我在 Spyder 4.1.5 中运行此代码

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from itertools import count
import random

xcord = []
ycord = [5]

index = count()
xcord.append(next(index))

def animate(i):
    xcord.append(next(index))
    ycord.append(random.randint(0,5))
    print(xcord)
    print(ycord)
    plt.cla()
    plt.plot(xcord,ycord) 
 
fig, ax = plt.subplots(1,1)
print(xcord)
print(ycord)
ani = FuncAnimation(fig,animate,interval=1000)
plt.tight_layout()
plt.show()

【问题讨论】:

  • 请参考official reference for a sample of line animation。动画的基本结构是先建立图表,然后在动画函数中更新要绘制的数据。
  • 好的,谢谢。关于图表的初始设置,我明白你的观点。但是我从上面的链接中剪切并粘贴了示例,它只是绘制了一个正弦波(我认为是从进行初始化的线开始),但没有发生动画。有什么想法吗?

标签: python matplotlib


【解决方案1】:

我将通过修改官方动画以适合您的代码来回答。线条颜色为红色,线条宽度设置为 3。没有理由指定帧数并关闭重复。您可以根据需要自定义其余部分。

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from itertools import count
import random

xcord = []
ycord = [5]

index = count()
xcord.append(next(index))

fig, ax = plt.subplots(1,1)
ax.set(xlim=(0,20), ylim=(0, 5))
line, = ax.plot([], [], 'r-', lw=3)

def animate(i):
    xcord.append(next(index))
    ycord.append(random.randint(0,5))
    line.set_data(xcord, ycord)

ani = FuncAnimation(fig, animate, frames=19, interval=200, repeat=False)

plt.show()

【讨论】:

  • 我让动画工作了。但我的问题似乎出在 Anaconda/Spyder 中。即使是您提供的代码,如果我复制/粘贴到我的 Spyder 窗口并尝试运行,它也会出现一个空白图形。所以我尝试了一个全新的 python 安装并将代码粘贴到 REPL 窗口中,它在那里工作。如果我尝试之前在 Anaconda/Spyder 中尝试过的任何其他示例代码块,则在新安装的 REPL 窗口中可以正常工作。如果要在 Anaconda 上进行任何配置,请告诉我。否则我现在可以玩动画了。谢谢@r-beginners
  • 很高兴您能够用我的回答找出问题所在,请单击复选标记接受我的回答。另外,我的环境是 JupyterLab,所以很遗憾我对蜘蛛没有任何建议。
  • 您可能需要指定后端,如this answer 中所述。 %matplotlib qt ?
  • 太棒了。这个问题和我的完全一样,那里提到的解决方案在 Spyder 中对我有用。感谢您向我指出过去的这个问题
  • 所以你已经解决了蜘蛛问题。由于您会第一个询问问题是否已解决,请参考following page请接受我的回答。
猜你喜欢
  • 2016-06-21
  • 2017-06-08
  • 2015-03-03
  • 2018-06-19
  • 1970-01-01
  • 2019-06-13
  • 2020-08-13
  • 2014-10-09
  • 2019-08-25
相关资源
最近更新 更多