Как преобразовать анимацию matplotlib в тег HTML5 <video> - PullRequest
2 голосов
/ 14 марта 2019

Ниже приведен код графика анимации matplolib, а здесь , как его сохранить.

from IPython.display import HTML
import matplotlib.pyplot as plt
import matplotlib.animation 
import numpy as np

t = np.linspace(0,2*np.pi)
x = np.sin(t)

fig, ax = plt.subplots()
ax.axis([0,2*np.pi,-1,1])
l, = ax.plot([],[])

def animate(i):
    l.set_data(t[:i], x[:i]);

ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t));
#HTML(ani.to_jshtml())

ani.to_html5_video()

В основном я копирую сгенерированный код в базовый html-скрипт, подобный следующему:

<html>
<head>
<title>Page Title</title>
</head>
<body>

<h1>My First Heading</h1>

<video width="432" height="288" controls autoplay loop> BLABLA </video>
</body>
</html>

График не отображается, но есть заголовок и видео меню. Зачем? Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Просто указав ani.to_html5_video(), вы не получите правильную строку.Если вы внимательно посмотрите на то, что скопировали, вы увидите разрывы строк (\n) по всему выводу.(Я отметил их на скриншоте ...)

enter image description here

Используйте

print(ani.to_html5_video())

для получения HTML-кода видео,Или для непосредственного сохранения в файл

with open("myvideo.html", "w") as f:
    print(ani.to_html5_video(), file=f)


Пояснение

В качестве пояснительного примера возьмите

string = "Hello\nWorld"

Если выукажите string в ячейке, в которой он будет производить

'Hello\nWorld'

Но если вы print(string), он даст вам интерпретированную строку

Hello
World

enter image description here

0 голосов
/ 14 марта 2019

Функция to_html5 имеет значение по умолчанию embed_limit, равное 20 МБ.

If the embed_limit is exceeded, this returns the string "Video too large to embed."

Полагаю, ваша анимация превышает этот предел. Когда вы определяете тег <video> в HTML, заголовок и элементы управления тем не менее генерируются.

Вы можете взглянуть на сгенерированный документ, чтобы увидеть, просто ли в теле видео написано «Видео слишком велико для встраивания». Если это так, вы можете попытаться увеличить embed_limit.

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