Я пытаюсь сохранить анимацию с полностью прозрачным фоном. Настройка:
fig1 = (...,facecolor=(1,1,1,0))
Не похоже на работу. Кроме того, если вы сделаете это и просмотрите график, вы получите эти странные эффекты прозрачности и запаздывающую анимацию. Любопытно, почему это тоже происходит, но в основном я просто хочу, чтобы фон был сохранен как прозрачный.
Если я тогда попробую:
line_ani.save('lines1.gif', writer='imagemagick',savefig_kwargs={"facecolor": (1,1,1,0)})
Тогда я получаю вывод, который не имеет прозрачного фона и делает линии толстыми. Тот же интерес, что и выше, объясняет, почему если сделать цифру альфа равной 0. Это даст эффект.
Еще одна попытка:
fig1 = (...,facecolor=(1,1,1,0))
line_ani.save(...,savefig_kwargs={"transparent": None})
Также не дает прозрачного фона.
Если я просто включу цвет лица в словарь, то он выдаст нежелательную ошибку сгущения линии.
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")
Если вы запустите код, который должен показать анимацию, а затем сохраните его. Он также рассчитает время выполнения.