Для генерации HTML-страницы и генерации графиков предлагается использовать следующие библиотеки: jinja2 и ploty. Вместо плоти можно использовать matplotlib или например seaborn.
Рассмотрим Jinja2 - это удобный HTML-шаблонизатор, он позволяет создать шаблон, а затем генерировать HTML-код с данными.
Например, данный код генерирует страничку из шаблона, а затем сохраняет ее.
from jinja2 import Template
html = open('template.html').read() #чтение шаблона
template = Template(html) #шаблонизация
with open('./index.html', 'w') as fh: #сохранение сгенерированного html
fh.write(template.render())
Так, но что есть template.html и зачем он нужен?
На самом деле, чтобы вывести на экран браузера страницу мы в любом случае прибегаем к HTML. Для выполнения данной работы не требуется знание html, однако его основы нам сильно пригодятся. Более подробно про html и его устройство можно прочитать тут (https://webref.ru/course/html-tutorial/introduction), либо посмотреть любой туториал на ютубе.
Давайте рассмотрим структуру нашего template, как пример:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Проектный сем</title>
</head>
<body>
<div>{{mark}}</div>
<div>{{plot}}</div>
</body>
</html>
То, что мы видим в {{}} и есть параметры, которые мы будем изменять, это может быть любой тип данных, от интерактивного графика, до цифр.
Однако в коде выше мы только сохраняем файл, не изменяя значения шаблона. Давайте это изменим. Более подробно про jinja2 можно прочитать тут https://pythonru.com/uroki/7-osnovy-shablonizatora-jinja.
from jinja2 import Template
import plotly.graph_objects as go
html = open('template.html').read()
template = Template(html)
with open('./index.html', 'w') as fh:
fh.write(template.render(mark="Оценка", plot="График"))
В итоге, наш html файл будет иметь следущий вид:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Проектный сем</title>
</head>
<body>
<div>Оценка</div>
<div>График</div>
</body>
</html>
После того, как мы научились генерировать странички, давайте рассмотрим процесс создания графика и добавление его в html.
Давайте построим график функции $f(x) = x^2$ от 0 до 5 с шагом 0.1.
import numpy as np
import plotly.graph_objects as go
x = np.arange(0, 5, 0.1)
def f(x):
return x**2
fig = go.Figure([go.Scatter(x=x, y=f(x))])
fig.show()
В итоге мы получаем вот такой график
График интерактивный, его можно уменьшать, увеличивать, смотреть значения