Сохранение анимированной диаграммы Matplotlib в GIF - PullRequest
0 голосов
/ 03 июня 2019

У меня есть анимированная диаграмма matplotlib, которую я пытаюсь сохранить в файл .gif, но я не могу заставить работать свой модуль записи изображений.

Я установил imagemagick и проверил, что он работаетна моем компьютере с помощью инструкций, приведенных на его странице установки , но при этом:

anim.save('gd.gif', writer='imagemagick')

я получаю следующее сообщение об ошибке:

MovieWriter imagemagick unavailable. Trying to use pillow instead.

ОднакоВыполнение anim.save('gd.gif', writer='pillow') выдает следующее сообщение об ошибке:

ValueError: not enough image data

Я попытался установить ffmpeg с помощью команды conda install -c conda-forge ffmpeg.Похоже, что он установлен правильно, но я не знаю, как связать его с matplotlib, по-видимому.

Указание записывающего устройства в качестве ffmpeg выдает то же сообщение об ошибке, которое я встречал с imagemagick.

Я также попытался добавить путь imagemagick к пути файла конфигурации matplotlib со следующей строкой:

animation.convert_path: 'C:\Program Files\ImageMagick-7.0.8-Q16\magick.exe'

Это было , предложенное в этом вопросе .

Казалось, ничего из этого не сработало.

Я на Windows 10 и использую Python 3.7

1 Ответ

1 голос
/ 03 июня 2019

Я ущипнул этот код из паутины, который изначально не работал.
Я изменил строку:

rcParams['animation.convert_path'] = r'/usr/bin/convert'

, чтобы она указала на мой convert бинарный файл, и он запустился.По общему признанию, это на Linux, но я не вижу, что это должно отличаться.Как отметил Марк Сетчелл в своем комментарии к первоначальному вопросу, похоже, что имя binary вполне может зависеть от версии / операционной системы, которую вы используете.Чтобы изолировать, какой из них использовать, я бы предложил сначала попробовать команду command line.
Например, для меня в Linux:

convert -version

дает:

Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org

Ваш пробег может отличаться!Тем более, что я больше не могу вспомнить о выдаче команд терминала в ОС Windows.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import rcParams

# configure full path for ImageMagick
rcParams['animation.convert_path'] = r'/usr/bin/convert'

TWOPI = 2*np.pi

fig, ax = plt.subplots()

t = np.arange(0.0, TWOPI, 0.001)
s = np.sin(t)
l = plt.plot(t, s)

ax = plt.axis([0,TWOPI,-1,1])

redDot, = plt.plot([0], [np.sin(0)], 'ro')

def animate(i):
    redDot.set_data(i, np.sin(i))
    return redDot,

# create animation using the animate() function with no repeat
myAnimation = animation.FuncAnimation(fig, animate, frames=np.arange(0.0, TWOPI, 0.1), \
                                      interval=10, blit=True, repeat=False)

# save animation at 30 frames per second
myAnimation.save('myAnimation.gif', writer='imagemagick', fps=30)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...