Создание графиков для веб-сайтов: Python, Matplotlib и интерактивность

Раздел: Веб-разработка -> Matplotlib и Seaborn

Основные подходы к веб-визуализации с помощью Python

Наиболее эффективное решение для быстрой генерации статических графиков и их интеграции в веб-сайты - использование библиотеки Matplotlib. Графики сохраняются в форматах PNG, SVG или PDF, после чего вставляются в HTML через тег <img>. Этот подход не требует на стороне клиента дополнительных библиотек, подходит для отчетов, дашбордов с обновлением изображений.


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)
plt.title('График синуса')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.savefig('static/sine_wave.png', dpi=150, bbox_inches='tight')

библиотека для построения графиков python (библиотека для построения графиков в python (matplotlib))

Пояснение: подготавливаются данные, строится линия, настраиваются подписи, изображение сохраняется в указанную папку. Цель: создание простого графика для вставки на страницу.

Типичные ошибки: кириллица отображается квадратами. Решение - задать шрифт: plt.rcParams['font.family'] = 'DejaVu Sans'. Другая проблема - большой размер файла; для веба рекомендуется SVG или PNG с dpi не более 100.

Как получить более эстетичные графики с минимальными усилиями?

Использование Seaborn, который расширяет Matplotlib, предоставляя красивые стили и упрощённый синтаксис. Данные подаются в виде pandas DataFrame.


import seaborn as sns
import pandas as pd
import numpy as np

df = pd.DataFrame({'x': range(10), 'y': np.random.rand(10)})
sns.set_theme(style='whitegrid')
sns.lineplot(data=df, x='x', y='y')
plt.show()

библиотеки для визуализации данных python (библиотеки для визуализации данных в python (matplotlib, seaborn, plotly))

Цель: быстрое создание привлекательных графиков для публикации. Случаи использования: анализ данных, презентации, статьи.

Зависимость от pandas: данные необходимо преобразовывать. Кроме того, Seaborn не поддерживает все виды графиков (например, трёхмерные). Для таких случаев используется чистый Matplotlib.

Как добавить интерактивность в статические графики Matplotlib?

Библиотека mpld3 конвертирует график Matplotlib в HTML с JavaScript-элементами управления (панорамирование, масштабирование).


import mpld3
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x))
mpld3.show()

визуализация программы python (визуализация программы на python)

Цель: превратить статический график в интерактивный без переписывания кода. Случаи использования: встраивание в Jupyter Notebook, блоги, где требуется небольшое взаимодействие.

Не все возможности Matplotlib переносятся: сложные заливки, патчи могут не работать. Для больших данных время рендеринга возрастает. Рекомендуется агрегировать точки перед передачей.

Как создать полноценные интерактивные графики с масштабированием и подсказками?

Plotly (библиотека для Python и JavaScript) генерирует самостоятельный HTML-файл или фрагмент, который встраивается через iframe.


import plotly.graph_objects as go
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
fig = go.Figure(data=go.Scatter(x=x, y=y, mode='lines'))
fig.write_html('interactive_plot.html')

Цель: создание графиков для веб-приложений, где требуется зуминг, выбор данных, анимация. Случаи использования: дашборды, отчёты с динамической фильтрацией.

Размер выходного файла может быть большим при тысячах точек. Решение: использовать fig.write_html(include_plotlyjs='cdn') для подключения Plotly.js из CDN, а также агрегировать данные (например, через scattergl).

- Python создание графика (создание графика в python)
- Python сделать график (построение графика в python)
- визуализация данных с помощью python и javascript (визуализация данных с помощью python и javascript)

Расширенные примеры кода и результаты

Ниже приведены подробные примеры с пояснениями и ожидаемыми результатами.

Пример 1: Matplotlib - сложный график с несколькими подграфиками

Создание 2x2 сетки подграфиков с различными типами визуализации.

Пример

import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(2, 2, figsize=(10, 8))
x = np.linspace(0, 2*np.pi, 100)

axes[0,0].plot(x, np.sin(x), 'r-', label='sin')
axes[0,0].set_title('Синус')
axes[0,1].plot(x, np.cos(x), 'b-', label='cos')
axes[0,1].set_title('Косинус')
axes[1,0].plot(x, np.tan(x), 'g-', label='tan')
axes[1,0].set_ylim(-5, 5)
axes[1,0].set_title('Тангенс')
axes[1,1].plot(x, np.exp(-x), 'm-', label='exp(-x)')
axes[1,1].set_title('Экспонента')

for ax in axes.flat:
    ax.legend()
    ax.grid(True)

plt.tight_layout()
plt.savefig('subplots_example.png', dpi=100)
Результат: файл 'subplots_example.png' с четырьмя графиками, расположенными в сетке, каждый с заголовком и легендой. Сетка и компактная верстка улучшают восприятие.

Пример 2: Seaborn - парный график (pairplot) для многомерного анализа

Визуализация взаимосвязей между несколькими переменными в наборе данных Iris.

Пример

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('iris')
sns.set_theme(style='ticks', palette='muted')
sns.pairplot(df, hue='species', diag_kind='kde', corner=True)
plt.savefig('pairplot_iris.png')
Результат: матрица диаграмм рассеяния с гистограммами плотности на диагонали, раскрашенная по видам ирисов. Угловая версия (corner=True) обрезает верхнюю половину для лаконичности.

Пример 3: mpld3 - встраивание в веб-страницу через iframe

Сохранение графика в HTML и вставка на сайт.

Пример

import mpld3
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
x = np.linspace(0, 10, 50)
y = np.random.randn(50).cumsum()
ax.plot(x, y, 'o-', markersize=4)
ax.set_title('Случайная прогулка')

html_str = mpld3.fig_to_html(fig)
with open('random_walk.html', 'w') as f:
    f.write(html_str)
Результат: HTML-файл 'random_walk.html', который можно открыть в браузере или встроить через <iframe src='random_walk.html'></iframe>. Пользователь может панорамировать и масштабировать график.

Пример 4: Plotly - график с несколькими следами и слайдером

Построение линии и гистограммы с возможностью переключения через слайдер.

Пример

import plotly.graph_objects as go
import numpy as np

dates = np.arange('2024-01-01', '2024-01-11', dtype='datetime64[D]')
values1 = np.random.randn(10).cumsum()
values2 = np.random.randn(10).cumsum()

fig = go.Figure()
fig.add_trace(go.Scatter(x=dates, y=values1, name='Ряд 1'))
fig.add_trace(go.Scatter(x=dates, y=values2, name='Ряд 2'))
fig.update_layout(title='Сравнение временных рядов', xaxis_title='Дата')
fig.write_html('timelines_plotly.html')
Результат: интерактивный HTML-документ с двумя кривыми, всплывающими подсказками при наведении, кнопкой сброса масштаба. График полностью автономен для публикации в интернете.

Визуализация данных с помощью Python и JavaScript - comments

En
визуализация данных с помощью python и javascript (python)