Python Can';t在Matplotlib中将多个动画保存为单个gif

Python Can';t在Matplotlib中将多个动画保存为单个gif,python,matplotlib,animation,3d,Python,Matplotlib,Animation,3d,我试图在matplotlib中制作一个3D动画,我希望我的绘图组合在一起,但我无法将其保存为gif文件。我制作了两个不同的绘图,但我不能将它们保存在一个文件中。我该怎么办 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import axes3d as p3 import matplotlib.animation as animation fig = plt.figure() ax =

我试图在matplotlib中制作一个3D动画,我希望我的绘图组合在一起,但我无法将其保存为gif文件。我制作了两个不同的绘图,但我不能将它们保存在一个文件中。我该怎么办

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d as p3
import matplotlib.animation as animation


fig = plt.figure()
ax = p3.Axes3D(fig)

def gen(n):
    z = 0
    while z < 10:
        yield np.array([0, 10 * np.cos((-18 * np.pi * z) + (2 * np.pi / 3)), z])
        z += 10 / n

def gen1(m):
    z = 0
    while z < 10:
        yield np.array([-5 * np.cos((-18 * np.pi * z) + (2 * np.pi / 3)), 0, z])
        z += 10 / m

def update(num, data, line):
    line.set_data(data[:2, :num])
    line.set_3d_properties(data[2, :num])

N = 100
data = np.array(list(gen(N))).T
line, = ax.plot(data[0, 0:1], data[1, 0:1], data[2, 0:1])

M = 100
data1 = np.array(list(gen1(M))).T
line1, = ax.plot(data1[0, 0:1], data1[1, 0:1], data1[2, 0:1])

# Setting the axes properties
ax.set_xlim3d([-10.0, 10.0])
ax.set_xlabel('X')

ax.set_ylim3d([-10.0, 10.0])
ax.set_ylabel('Y')

ax.set_zlim3d([0.0, 10.0])
ax.set_zlabel('Z')

ani = animation.FuncAnimation(fig, update, N, fargs=(data, line), interval=8000/N, blit=False), animation.FuncAnimation(fig, update, M, fargs=(data1, line1), interval=8000/N, blit=False)
# ani1 = animation.FuncAnimation(fig, update, M, fargs=(data1, line1), interval=8000/N, blit=False)
ani.save('FlatWave.gif', writer='imagemagick')

您应该只有为所有艺术家设置动画的
FuncAnimation
对象

例如:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d as p3
import matplotlib.animation as animation

fig = plt.figure()
ax = p3.Axes3D(fig)

def gen(n):
    z = 0
    while z < 10:
        yield np.array([0, 10 * np.cos((-18 * np.pi * z) + (2 * np.pi / 3)), z])
        z += 10 / n

def gen1(m):
    z = 0
    while z < 10:
        yield np.array([-5 * np.cos((-18 * np.pi * z) + (2 * np.pi / 3)), 0, z])
        z += 10 / m

def update(num, data, line):
    line.set_data(data[:2, :num])
    line.set_3d_properties(data[2, :num])

def update_both(num, data1, line1, data2, line2):
    update(num, data1, line1)
    update(num, data2, line2)

N = 100
data = np.array(list(gen(N))).T
line, = ax.plot(data[0, 0:1], data[1, 0:1], data[2, 0:1])

M = 100
data1 = np.array(list(gen1(M))).T
line1, = ax.plot(data1[0, 0:1], data1[1, 0:1], data1[2, 0:1])

# Setting the axes properties
ax.set_xlim3d([-10.0, 10.0])
ax.set_xlabel('X')

ax.set_ylim3d([-10.0, 10.0])
ax.set_ylabel('Y')

ax.set_zlim3d([0.0, 10.0])
ax.set_zlabel('Z')

ani = animation.FuncAnimation(fig, update_both, N, fargs=(data, line, data1, line1), interval=8000/N, blit=False)
ani.save('FlatWave.gif', writer='imagemagick')
将numpy导入为np
将matplotlib.pyplot作为plt导入
从mpl_toolkits.mplot3d导入axes3d作为p3
将matplotlib.animation导入为动画
图=plt.图()
ax=p3.Axes3D(图)
def发电机(n):
z=0
当z<10时:
产生np.数组([0,10*np.cos(-18*np.pi*z)+(2*np.pi/3)),z])
z+=10/n
def gen1(m):
z=0
当z<10时:
产生np.数组([-5*np.cos(-18*np.pi*z)+(2*np.pi/3)),0,z])
z+=10/m
def更新(数值、数据、行):
line.set_数据(数据[:2,:num])
line.set_3d_属性(数据[2,:num])
def更新_二者(num、data1、line1、data2、line2):
更新(num,data1,line1)
更新(num,data2,line2)
N=100
data=np.array(list(gen(N))).T
直线,=ax.plot(数据[0,0:1],数据[1,0:1],数据[2,0:1])
M=100
data1=np.array(list(gen1(M)).T
line1,=ax.plot(数据1[0,0:1],数据1[1,0:1],数据1[2,0:1])
#设置轴属性
ax.set_xlim3d([-10.0,10.0])
ax.set_xlabel('X')
ax.set_ylim3d([-10.0,10.0])
ax.set_ylabel('Y'))
ax.set_zlim3d([0.0,10.0])
ax.set_zlabel('Z'))
ani=animation.FuncAnimation(图,update_both,N,fargs=(数据,行,数据1,行1),间隔=8000/N,blit=False)
ani.save('FlatWave.gif',writer='imagemagick')

它表示您正在调用元组上的
save
。检查从
FuncAnimation
返回的内容
ani
似乎是一个元组,因此您需要的可能是它的一个元素。欢迎使用。如果您的问题得到解决,请考虑使用左边的复选标记来回答主题。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d as p3
import matplotlib.animation as animation

fig = plt.figure()
ax = p3.Axes3D(fig)

def gen(n):
    z = 0
    while z < 10:
        yield np.array([0, 10 * np.cos((-18 * np.pi * z) + (2 * np.pi / 3)), z])
        z += 10 / n

def gen1(m):
    z = 0
    while z < 10:
        yield np.array([-5 * np.cos((-18 * np.pi * z) + (2 * np.pi / 3)), 0, z])
        z += 10 / m

def update(num, data, line):
    line.set_data(data[:2, :num])
    line.set_3d_properties(data[2, :num])

def update_both(num, data1, line1, data2, line2):
    update(num, data1, line1)
    update(num, data2, line2)

N = 100
data = np.array(list(gen(N))).T
line, = ax.plot(data[0, 0:1], data[1, 0:1], data[2, 0:1])

M = 100
data1 = np.array(list(gen1(M))).T
line1, = ax.plot(data1[0, 0:1], data1[1, 0:1], data1[2, 0:1])

# Setting the axes properties
ax.set_xlim3d([-10.0, 10.0])
ax.set_xlabel('X')

ax.set_ylim3d([-10.0, 10.0])
ax.set_ylabel('Y')

ax.set_zlim3d([0.0, 10.0])
ax.set_zlabel('Z')

ani = animation.FuncAnimation(fig, update_both, N, fargs=(data, line, data1, line1), interval=8000/N, blit=False)
ani.save('FlatWave.gif', writer='imagemagick')