[英]Python animated multisubplot matplotlib won't show
我正在尝试通过笛卡尔坐标和极坐标中的变量变化来制作函数变形的动画多子图视图。 我的代码未显示任何错误,但不会输出任何内容。 这里是:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as anim
import matplotlib.gridspec as gridspec
X = np.arange(-10, 10.5, 0.6)
f = lambda x: x + 1/(x**2) + 3/2*np.sin(x)
g = lambda x, k: f(x + k)
h = lambda x, k: f(x) + k
i = lambda x, k: f(x * k)
j = lambda x, k: f(x) * k
l = lambda x, k: np.abs(f(x))
m = lambda x, k: k*f(k*(x+k))+k
funcs = [g, h, i, j, l]
names = ['f(x + k)', 'f(x) + k', 'f(k * x)', 'k * f(x)', '|f(x)|', 'YOLO']
f1, ax1 = plt.subplots(1, 6, figsize=(20,3))
#f2, ax2 = plt.subplots(1, 6, figsize=(20,3), subplot_kw=dict(projection='polar'))
for i, a in enumerate(ax1):
a.set_title(names[i])
lines = []
for a in ax1:
line, = a.plot(X, [np.nan] * len(X), 'g-')
lines.append(line)
def animate1(k): # update the data.
for l in lines:
l.set_ydata(funcs[i](X, k))
return lines[0]
ani = anim.FuncAnimation(f1, animate1, interval=2, blit=False, save_count=50)
plt.show()
当我运行您的代码时,我在行l.set_ydata(funcs[i](X, k))
上收到IndexError: list index out of range
error,因为您的funcs
数组中只有5个元素,但是它循环了6个元素因为您有6个子图。 尝试将funcs = [g, h, i, j, l]
更改为funcs = [g, h, i, j, l, m]
编辑:修复该问题后,它在同一行上给出了divide by zero
错误。 这是因为第一次通过animate1
函数, k=0
。 因此,当您调用m = lambda x, k: k*f(k*(x+k))+k
函数时,它将值零传递给您的f = lambda x: x + 1/(x**2) + 3/2*np.sin(x)
,因此失败。 您需要以某种方式在lambda函数或animate1
函数中解决该animate1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.