Matplotlib в Data Science: построение графиков и визуализация
Основные возможности Matplotlib
Matplotlib
- это библиотека для создания статических, анимированных и интерактивных визуализаций на Python. Основной модуль pyplot предоставляет интерфейс, похожий на MATLAB. Типичный рабочий процесс: импорт, создание фигуры и осей, построение данных, настройка и отображение.import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.show()библиотека для построения графиков python (библиотека для построения графиков в python (matplotlib))
Результат:
Отображается окно с синусоидой.
библиотеки для визуализации данных python (библиотеки для визуализации данных в python (matplotlib, seaborn, plotly))
Типичные проблемы:
- График не отображается в интерактивной среде (Jupyter Notebook) - нужно добавить %matplotlib inline.
- Русские символы отображаются как квадраты - требуется подключить шрифт, поддерживающий кириллицу, например: plt.rcParams['font.family'] = 'DejaVu Sans' (или другой шрифт).
Как построить линейный график с несколькими линиями?
Для отображения нескольких зависимостей на одном графике используется несколько вызовов plt.plot().
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 5, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label='sin')
plt.plot(x, y2, label='cos')
plt.legend()
plt.show()визуализация программы python (визуализация программы на python)
Цель:
Сравнение двух или более рядов данных. Используется в анализе временных рядов, физических экспериментах.Проблема:
Легенда может перекрывать данные. Решение: переместить легенду с помощью параметра loc (например, plt.legend(loc='upper left')).Как настроить заголовок, подписи осей, легенду?
Для оформления используются функции title(), xlabel(), ylabel(), legend().
plt.plot(x, y)
plt.title('График синуса')
plt.xlabel('Время (с)')
plt.ylabel('Амплитуда')
plt.grid(True)
plt.show()построить график по коду python (построение графика по коду python)
Цель:
Улучшение читаемости графика, добавление контекста. Используется в отчетах, презентациях.Проблема:
Русский текст в заголовке отображается некорректно. Решение: установить шрифт, поддерживающий кириллицу, через plt.rcParams['font.sans-serif'] = ['Arial'] (или другой). В Jupyter также помогает plt.rcParams['axes.unicode_minus'] = False.Как создать гистограмму?
Гистограмма строится функцией hist(). Она принимает массив данных и количество корзин.
data = np.random.randn(1000)
plt.hist(data, bins=30, edgecolor='black')
plt.title('Гистограмма нормального распределения')
plt.show()Python визуализация (визуализация в python)
Цель:
Визуализация распределения числовых данных. Используется в статистике, EDA.Проблема:
Неверный выбор количества корзин искажает форму распределения. Решение: использовать правило Freedman-Diaconis или bins='auto'.Как построить несколько подграфиков (subplots)?
Функция subplots() создает сетку осей. Рассмотрим пример 2x2.
fig, axes = plt.subplots(2, 2, figsize=(10, 6))
axes[0,0].plot(x, y1)
axes[0,1].scatter(x, y2)
axes[1,0].hist(data)
axes[1,1].bar([1,2,3],[4,5,6])
plt.tight_layout()
plt.show()Python создание графика (создание графика в python)
Цель:
Сравнение нескольких визуализаций в одном окне. Используется в дашбордах, отчетах.Проблема:
Подграфики наезжают друг на друга. Решение: plt.tight_layout() или ручная настройка через subplots_adjust().Как изменить стиль графика (темы)?
Matplotlib предоставляет несколько встроенных стилей, управляемых через plt.style.use().
plt.style.use('seaborn-v0_8')
plt.plot(x, y)
plt.show()Python сделать график (построение графика в python)
Цель:
Быстрое изменение внешнего вида для разных целей (публикации, презентации).Проблема:
Стиль может переопределить настройки шрифтов. Решение: применять стиль до всех остальных настроек или использовать rcParams после стиля.Как сохранить график в файл?
Используется savefig() с указанием пути и формата (PNG, PDF, SVG).
plt.plot(x, y)
plt.savefig('my_plot.png', dpi=300, bbox_inches='tight')
plt.show()Цель:
Экспорт для использования вне Python.Проблема:
Белые поля вокруг графика. Решение: параметр bbox_inches='tight' обрезает поля.Расширенные примеры работы с Matplotlib
Пример 1. Множественные подграфики с разными типами и настройками
Создадим фигуру 2x2, где разместим линейный график, scatter plot, столбчатую диаграмму и гистограмму. Настроим подписи, цвета, легенду.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 50)
y1 = np.sin(x)
y2 = np.cos(x)
categories = ['A', 'B', 'C', 'D']
values = [10, 15, 7, 12]
data = np.random.randn(500)
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
# Линейный график
axes[0,0].plot(x, y1, 'b-', label='sin')
axes[0,0].plot(x, y2, 'r--', label='cos')
axes[0,0].set_title('Тригонометрические функции')
axes[0,0].legend()
axes[0,0].grid(True)
# Scatter plot
axes[0,1].scatter(x, y1, c='green', alpha=0.5, edgecolors='black')
axes[0,1].set_title('Scatter с прозрачностью')
# Столбчатая диаграмма
axes[1,0].bar(categories, values, color=['red','blue','green','orange'])
axes[1,0].set_title('Столбчатая диаграмма')
axes[1,0].set_ylabel('Значения')
# Гистограмма
axes[1,1].hist(data, bins=20, color='purple', edgecolor='white')
axes[1,1].set_title('Гистограмма случайных данных')
plt.tight_layout()
plt.show()Результат:
Окно с четырьмя подграфиками, каждый настроен индивидуально.
Пример 2. Анимация с помощью FuncAnimation
Анимация позволяет наблюдать изменение данных во времени. Создадим анимированный синус с изменяющейся фазой.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 100)
line, = ax.plot(x, np.sin(x))
def update(frame):
line.set_ydata(np.sin(x + frame*0.1))
return line,
ani = FuncAnimation(fig, update, frames=100, interval=50)
# Для отображения в Jupyter: plt.show() или сохранение в GIF
# ani.save('sine_wave.gif', writer='pillow')
plt.show()Результат:
Окно с анимированной синусоидой, бегущей волной.
Пример 3. Интерактивные подсказки с mplcursors
Библиотека mplcursors добавляет всплывающие подсказки при наведении на точки.
import matplotlib.pyplot as plt
import mplcursors
import numpy as np
x = np.random.rand(50)
y = np.random.rand(50)
plt.scatter(x, y)
mplcursors.cursor(hover=True)
plt.show()Результат:
При наведении на точку отображается ее координаты (x, y).
Пример 4. Трехмерные графики (mplot3d)
Matplotlib поддерживает 3D визуализацию через модуль mplot3d.
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
ax.plot_surface(X, Y, Z, cmap='viridis')
ax.set_title('3D поверхность')
plt.show()Результат:
Вращающийся 3D график с цветовой картой.
Пример 5. Кастомизация стилей линий и маркеров
Детальная настройка линий, маркеров и цветов для более выразительной визуализации.
x = np.linspace(0, 2*np.pi, 20)
y = np.sin(x)
plt.plot(x, y,
color='darkred',
linestyle='dashed',
linewidth=3,
marker='o',
markersize=8,
markerfacecolor='gold',
markeredgecolor='black',
markeredgewidth=1)
plt.title('Кастомный стиль линии и маркеров')
plt.grid(True, linestyle=':', alpha=0.7)
plt.show()Результат:
График с красной пунктирной линией и золотыми точками с черной обводкой.