Spyder 中动态图显示问题
在学习matplotlib.animation模块时,使用Spyder编辑以下代码,运行后发现创建的动画只能静态显示
# 创建动画图形
import matplotlib.pyplot as plt
from matplotlib import animation
def create_circle():
circle = plt.Circle((0,0),radius = 0.5)
return circle
def update_radius(i, circle):
circle.radius = i * 0.5
return circle
def create_animation():
fig = plt.gcf()
ax = plt.axes(xlim = (-10, 10), ylim = (-10, 10))
ax.set_aspect('equal')
circle = create_circle()
ax.add_patch(circle)
anim = animation.FuncAnimation(fig, update_radius,fargs = (circle,),frames = 30, interval = 50)
plt.title('Simple Circle Animation')
plt.show()
if __name__ == '__main__':
create_animation()
显示的图形如下,未有报错:
但是在python自带的idle下运行,却生成了动态图:
查找了网上类似的问题,大部分的解决方案是将Spyder中Ipython控制台的绘图一栏中BackEnd设置成自动或是qt5,但是我按此进行操作后,仍然不能显示动图。
但是奇怪的是,在一顿瞎操作后(我将封装的显示动画的代码段去除封装),这时候Spyder也能显示动图了
# 创建动画图形
import matplotlib.pyplot as plt
from matplotlib import animation
def create_circle():
circle = plt.Circle((0,0),radius = 0.5)
return circle
def update_radius(i, circle):
circle.radius = i * 0.5
return circle
# 貌似底下这段代码封装在函数里,Spyder无法动态显示(python自带的idle可以),不封装则可以动态显示
fig = plt.gcf()
ax = plt.axes(xlim = (-10, 10), ylim = (-10, 10))
ax.set_aspect('equal')
circle = create_circle()
ax.add_patch(circle)
anim = animation.FuncAnimation(fig, update_radius,fargs = (circle,),frames = 30, interval = 50)
plt.title('Simple Circle Animation')
plt.show()
虽然误打误撞,但还是没明白为什么上述那段代码段的封装会影响Spyder的动图显示,明明在python自带的idle中运行不受影响,而在Spyder中运行却有问题