Python动画多子图matplotlib将不会显示

时间:2019-02-15 17:26:42

标签: python variables matplotlib animation plot

我正在尝试对笛卡尔坐标系和极坐标中的变量都进行更改的功能变形的动画多子图视图。我的代码未显示任何错误,但不会输出任何内容。在这里:

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()

1 个答案:

答案 0 :(得分:0)

运行代码时,我在行IndexError: list index out of range上遇到一个l.set_ydata(funcs[i](X, k))错误,因为您的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函数中以某种方式解决该问题。