Matplotlib и Seaborn: инструменты для построения графиков

Раздел: Визуализация данных -> Matplotlib и Seaborn

Библиотеки визуализации данных Python

Основным и наиболее универсальным решением для визуализации данных в Python является библиотека Matplotlib. Она предоставляет полный контроль над элементами графика и служит фундаментом для других библиотек, таких как Seaborn. Seaborn, в свою очередь, упрощает создание статистических графиков, предлагая удобные функции и привлекательные стили по умолчанию. Рассмотрим базовый пример построения линейного графика с помощью обеих библиотек.

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

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

# Matplotlib
plt.figure(figsize=(8,4))
plt.plot(x, y, label='sin(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Линейный график с Matplotlib')
plt.legend()
plt.grid(True)
plt.show()

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

Результат: окно с синусоидой, сеткой, легендой

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

# Seaborn (использует ту же фигуру)
sns.set_theme(style='darkgrid')
plt.figure(figsize=(8,4))
sns.lineplot(x=x, y=y, label='sin(x)')
plt.title('Линейный график с Seaborn')
plt.legend()
plt.show()

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

Результат: аналогичный график, но в стиле darkgrid

построить график по коду python (построение графика по коду python)

Обе библиотеки позволяют создавать качественные визуализации. Выбор зависит от задачи: Matplotlib даёт гибкость, Seaborn - скорость разработки и красивый дизайн.

Как построить несколько линий на одном графике и добавить легенду?

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

x = np.linspace(0, 10, 100)
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)

Пояснение: каждая линия добавляется вызовом plot, легенда формируется из параметров label. Если забыть вызвать legend(), метки не отобразятся.

Типичная ошибка: перекрытие меток на оси X при большом количестве точек. Решение: повернуть метки с помощью plt.xticks(rotation=45) или использовать autofmt_xdate() для дат.

Как изменить стиль графика, цвета и сетку?

Цель: придание графику профессионального вида. Seaborn предоставляет готовые темы: darkgrid, whitegrid, dark, white, ticks. Matplotlib позволяет использовать стили ggplot, seaborn, fivethirtyeight и другие.

sns.set_style('whitegrid')
plt.plot(x, y1, color='red', linewidth=2)
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()

# Альтернатива - глобальный стиль Matplotlib
plt.style.use('ggplot')
plt.plot(x, y1)
plt.show()

Python создание графика (создание графика в python)

Проблема: изменение стиля после создания графика не влияет на уже построенные элементы. Решение: устанавливать стиль до начала рисования.

Как построить гистограмму и ядерную оценку плотности (KDE)?

Цель: визуализация распределения данных. Seaborn упрощает эту задачу функциями histplot и kdeplot.

data = np.random.randn(500)
sns.histplot(data, kde=True, bins=30, color='skyblue')
plt.title('Гистограмма с KDE')
plt.show()

Python сделать график (построение графика в python)

В Matplotlib требуется отдельно вычислить гистограмму через np.histogram или plt.hist, а KDE через scipy.stats.gaussian_kde.

Типичная ошибка: неправильное количество бинов приводит к потере деталей или зашумлению. Рекомендуется использовать правило Freedman-Diaconis или автоподбор в Seaborn (bins='auto').

Как создать тепловую карту корреляции (heatmap)?

Цель: визуализация матрицы корреляций между переменными. Seaborn heatmap с аннотациями и цветовой шкалой.

import pandas as pd
df = pd.DataFrame(np.random.rand(10, 5), columns=['A','B','C','D','E'])
corr = df.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('Тепловая карта корреляций')
plt.show()

Python нарисовать график (построение графика в python)

Параметр annot=True отображает числовые значения, cmap задаёт цветовую карту. Для скрытия верхней половины (симметричность) используется маска.

Проблема: значения в ячейках перекрываются при большом количестве переменных. Решение: уменьшить размер аннотаций (fmt='.2f', annot_kws={'size':8}) или убрать аннотации.

Как организовать несколько подграфиков (subplots)?

Цель: размещение нескольких графиков в одной фигуре для сравнения. Matplotlib subplots - гибкий инструмент.

fig, axes = plt.subplots(2, 2, figsize=(10,6))
axes[0,0].plot(x, y1)
axes[0,0].set_title('sin')
axes[0,1].plot(x, y2, color='red')
axes[0,1].set_title('cos')
axes[1,0].scatter(x[:50], y1[:50])
axes[1,0].set_title('scatter')
axes[1,1].hist(data, bins=20)
axes[1,1].set_title('hist')
plt.tight_layout()
plt.show()

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

tight_layout() предотвращает перекрытие элементов. Можно также использовать GridSpec для сложных макетов.

Ошибка: оси подграфиков не синхронизированы. Решение: использовать sharex=True или sharey=True в subplots.

Как сохранить график в файл с высоким разрешением?

Цель: экспорт графика для публикации или отчёта. Matplotlib savefig с параметрами dpi, bbox_inches='tight', format.

plt.plot(x, y1)
plt.savefig('sin_plot.png', dpi=300, bbox_inches='tight')
plt.savefig('sin_plot.pdf', format='pdf')
plt.close()  # освобождает память

Для векторных форматов (PDF, SVG) лучше выбирать dpi=300. bbox_inches='tight' обрезает белые поля.

Проблема: кириллические символы в заголовках отображаются как квадраты. Решение: добавить plt.rcParams['font.family'] = 'DejaVu Sans' или указать шрифт, поддерживающий кириллицу (например, 'Arial').

- Python сохранить график (сохранение графика с помощью python)
- графика matplotlib в python (графика с matplotlib в python)

Расширенные примеры и неочевидные техники

Пример 1: Две оси Y на одном графике (twinx)

Цель: отображение двух рядов данных с разными единицами измерения на одном поле. Использование twinx() создаёт вторую ось Y.

Пример
x = np.linspace(0,10,100)
y1 = np.sin(x) * 10
y2 = np.exp(x * 0.3)

fig, ax1 = plt.subplots(figsize=(8,5))
ax1.plot(x, y1, 'b-', label='sin (лев. ось)')
ax1.set_ylabel('Синус * 10', color='b')
ax1.tick_params(axis='y', labelcolor='b')

ax2 = ax1.twinx()
ax2.plot(x, y2, 'r--', label='exp (прав. ось)')
ax2.set_ylabel('Экспонента', color='r')
ax2.tick_params(axis='y', labelcolor='r')

# Общая легенда
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1+lines2, labels1+labels2, loc='upper left')

plt.title('Две оси Y')
plt.tight_layout()
plt.show()
Результат: график с синей линией по левой оси и красной пунктирной по правой, общая легенда в левом верхнем углу.

Такая техника полезна, когда необходимо показать взаимосвязь двух величин разного масштаба, например, температуру и давление.

Пример 2: Тепловая карта с маской и кастомной цветовой палитрой

Цель: скрыть верхнюю половину корреляционной матрицы (так как она симметрична) и настроить цветовую шкалу.

Пример
# Создание случайной корреляционной матрицы
np.random.seed(42)
data = np.random.randn(100, 6)
df = pd.DataFrame(data, columns=['A','B','C','D','E','F'])
corr = df.corr()

# Маска для верхнего треугольника
mask = np.triu(np.ones_like(corr, dtype=bool), k=1)

# Настройка цветовой палитры
cmap = sns.diverging_palette(250, 15, s=75, l=40, n=256, center='light')

plt.figure(figsize=(8,6))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f', cmap=cmap,
            center=0, square=True, linewidths=0.5, cbar_kws={'shrink':0.8})
plt.title('Корреляционная матрица (нижний треугольник)')
plt.tight_layout()
plt.show()
Результат: тепловая карта, отображающая только нижнюю часть матрицы, с аннотациями, палитрой от тёмно-синего до тёмно-красного через светлый центр.

Применяется в анализе данных для быстрой оценки взаимосвязей. Использование маски уменьшает визуальный шум.

Пример 3: Использование стиля seaborn-v0_8 и глобальная настройка rcParams

Цель: создание единообразного стиля для всех графиков в проекте. Seaborn v0.8+ предлагает стиль 'seaborn-v0_8', а Matplotlib позволяет задать параметры через rcParams.

Пример
# Установка стиля Seaborn
sns.set_theme(style='whitegrid', palette='muted', font_scale=1.2)

# Дополнительная настройка Matplotlib
plt.rcParams['figure.figsize'] = (10, 5)
plt.rcParams['lines.linewidth'] = 2
plt.rcParams['axes.titlesize'] = 16
plt.rcParams['legend.fontsize'] = 12

# Пример графика в новом стиле
x = np.linspace(0, 2*np.pi, 200)
y = np.sin(x) * np.exp(-x/5)

plt.plot(x, y, label='затухающий синус')
plt.fill_between(x, y, alpha=0.3)
plt.xlabel('Время (с)')
plt.ylabel('Амплитуда')
plt.title('График с глобальными настройками')
plt.legend()
plt.grid(True, linestyle=':', alpha=0.7)
plt.tight_layout()
plt.show()
Результат: график с единым стилем, увеличенным шрифтом, заливкой под кривой и пунктирной сеткой.

Такой подход удобен в длинных ноутбуках (Jupyter) или скриптах, где много визуализаций. Стиль 'whitegrid' даёт светло-серый фон с тонкими линиями сетки.

Библиотеки визуализации данных Python - comments

En
библиотеки визуализации python (python)