Python 无法使用透明背景保存动画gif(matplotlib.animation)

Python 无法使用透明背景保存动画gif(matplotlib.animation),python,matplotlib,animation,Python,Matplotlib,Animation,我试图保存一个背景完全透明的动画。设置: fig1 = (...,facecolor=(1,1,1,0)) 似乎不起作用。另外,作为一个补充,如果你这样做,并查看情节,然后你会得到这些奇怪的透明度效果和滞后的动画。我也很好奇为什么会发生这种情况,但我主要希望背景保存为透明 如果我尝试: line_ani.save('lines1.gif', writer='imagemagick',savefig_kwargs={"facecolor": (1,1,1,0)}) 然后,我得到一个没有透明背景

我试图保存一个背景完全透明的动画。设置:

fig1 = (...,facecolor=(1,1,1,0))
似乎不起作用。另外,作为一个补充,如果你这样做,并查看情节,然后你会得到这些奇怪的透明度效果和滞后的动画。我也很好奇为什么会发生这种情况,但我主要希望背景保存为透明

如果我尝试:

line_ani.save('lines1.gif', writer='imagemagick',savefig_kwargs={"facecolor": (1,1,1,0)})
然后,我得到一个没有透明背景的输出,使线条变粗。与上面的好奇一样,为什么将数字alpha设置为0会产生这种效果

另一次尝试:

fig1 = (...,facecolor=(1,1,1,0))
line_ani.save(...,savefig_kwargs={"transparent": None})
也不会产生透明的背景

如果我只是在字典中包含facecolor,那么它就会出现不希望出现的行加厚错误

line_ani.save(...,savefig_kwargs={"transparent": None,"facecolor":(1,1,1,0)})
代码如下

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time
from matplotlib.pyplot import figure

def update_line(num, data, line):
    line.set_data(data[..., :num])
    return line,

def plots():
    plt.xlim(-1, 1)
    plt.ylim(-1, 1)
    plt.xticks([])
    plt.yticks([])
    plt.box()

# Since I'm calling things twice, it's convenient to define these
fs = (3,3)
inter = 100
frames = 219
lw = 0.25
alph = 0

fig1 = plt.figure(figsize=fs)
l, = plt.plot([], [],'r',linewidth =lw)

# Generate placeholder for data and set initial conditions
DAT =np.zeros((2,300))
DAT[0][0] = 0
DAT[1][0] = 1

theta=2*np.pi*(1/np.e +0.01)

# 2D Rotation Matrix
def R(x):
    return [[np.cos(x),-np.sin(x)],[np.sin(x),np.cos(x)]]

# Generate the data
for i in range(len(DAT[0])):
    if i < len(DAT[0])-1:
        DAT[0][i+1]=DAT[0][i]*R(theta)[0][0] + DAT[1][i]*R(theta)[0][1]
        DAT[1][i+1]=DAT[0][i]*R(theta)[1][0] + DAT[1][i]*R(theta)[1][1]

# Animate the data
plots()
line_ani = animation.FuncAnimation(fig1, update_line, frames, fargs=(DAT, l),
                                   interval=inter, blit=True,repeat_delay = 2000)
plt.show()

# Save the animation
matplotlib.use("Agg")

fig1 = plt.figure(figsize=fs)
l, = plt.plot([], [],'r',linewidth = lw)
plots()
line_ani = animation.FuncAnimation(fig1, update_line, frames, fargs=(DAT, l),
                                   interval=inter, blit=True,repeat_delay = 2000)
print("Saving animation...")
now=time.time()
line_ani.save('lines1.gif', writer='imagemagick',savefig_kwargs={"transparent": None})
later = time.time()
print("Saved in time: ", int(later-now),"seconds")
将numpy导入为np
导入matplotlib
将matplotlib.pyplot作为plt导入
将matplotlib.animation导入为动画
导入时间
从matplotlib.pyplot导入图
def更新_行(数字、数据、行):
line.set_数据(数据[…,:num])
回程线,
def plots():
plt.xlim(-1,1)
plt.ylim(-1,1)
plt.xticks([])
plt.yticks([])
plt.box()
#因为我已经调用了两次,所以定义它们很方便
fs=(3,3)
inter=100
帧=219
lw=0.25
alph=0
图1=plt.图(figsize=fs)
l、 =plt.绘图([],[],'r',线宽=lw)
#为数据生成占位符并设置初始条件
DAT=np.零((2300))
DAT[0][0]=0
DAT[1][0]=1
θ=2*np.pi*(1/np.e+0.01)
#二维旋转矩阵
def R(x):
返回[[np.cos(x),-np.sin(x)],[np.sin(x),np.cos(x)]]
#生成数据
对于范围内的i(len(DAT[0]):
如果i

如果您运行代码,它将显示动画,然后保存它。它还将计算运行时间。

在动画中保存透明背景时可能存在错误。这里提出了一个解决方法:这是否回答了您的问题?我正试着把它改编成我们所说的2D案例。现在它只输出一个空白的gif。可能我的计划是错误的。将更新我的进度。在动画中保存透明背景时可能存在错误。这里提出了一个解决方法:这是否回答了您的问题?我正试着把它改编成我们所说的2D案例。现在它只输出一个空白的gif。可能我的计划是错误的。将更新我的进度。