Увеличение разрешения gif в matplotlib

#python #matplotlib #animation #gif #dpi

Вопрос:

Я создаю анимацию Python matplotlib и хотел бы сохранить ее в формате GIF, но разрешение GIF слишком низкое. Чтобы сравнить разрешение GIF с желаемым качеством, я сохранил один кадр в формате PNG. Результат намного лучше, как вы можете видеть ниже:

Анимированный GIF

PNG

Вот мой код построения графика для PNG:

 # Plot (PNG)

plt.style.use('dark_background')
plt.figure()
X, Y = np.meshgrid(np.arange(0, Lx), np.arange(0, Ly))
plt.contourf(X, Y, psisquare[3000, :, :], 100, cmap = plt.cm.viridis)
plt.colorbar()
plt.xlabel("x")
plt.ylabel("y")
plt.title("Densité de probabilité à t = "   str(round(3000*dt,5))   " s")
plt.savefig('2D_Schrodinger_Equation.png')
 

И построение кода для GIF:

 # Plot (GIF)

plt.style.use('dark_background')
fig = plt.figure()

def animate(k):
    k=k*100
    plt.clf()
    plt.pcolormesh(psisquare[k, :, :], cmap = plt.cm.viridis)
    plt.colorbar()
    plt.xlabel("x")
    plt.ylabel("y")
    plt.title(f"Densité de probabilité à t = {k*dt:.5f} s")
    return

anim = animation.FuncAnimation(fig, animate, frames = int(Nbi/100), interval = 50, repeat = True)

writergif = animation.PillowWriter(fps=30)
anim.save("2D_Schrodinger_Equation.gif", writer=writergif)
 

Как я могу улучшить качество GIF? Спасибо.

Комментарии:

1. Вы должны предоставить полный код, чтобы любому было проще его протестировать

2. @Nathz, изменение plt.figure() DPI решило проблему?

Ответ №1:

Я думаю, что увеличение dpi рисунка приведет к увеличению dpi результирующей анимации. Для улучшения качества попробуйте изменить экземпляр вашей фигуры:

 fig = plt.figure(dpi = 300)
 

Возможно, вам также потребуется изменить конец вашего сценария с помощью вызова animation.PillowWriter.setup() метода и, возможно, также предоставить dpi аргумент animation.Animation.save() методу. Без вашего полного кода, который вы попытаетесь воспроизвести, я не могу быть уверен.

 anim = animation.FuncAnimation(fig, animate, frames = int(Nbi / 100), interval = 50, repeat = True)

writergif = animation.PillowWriter(fps = 30)

# fig.dpi is default dpi, but can also be specified explicitly if preferred
writergif.setup(fig, "2D_Schrodinger_Equation.gif", dpi = 300) 

# May or may not need to specify dpi argument
anim.save("2D_Schrodinger_Equation.gif", writer = writergif, dpi = "figure")
 

Ознакомьтесь с setup методом в matplotlib.animation.PillowWriter документации здесь и save методом в matplotlib.animation.Документация по анимации здесь.