Визуализация данных с помощью Matplotlib в языке Python
Библиотека Matplotlib для Python: базовые приёмы и варианты построения графиков
Matplotlib представляет собой фундаментальную библиотеку визуализации данных в экосистеме Python. Основным способом работы является создание графика через модуль pyplot. Типичная последовательность действий: импорт модуля, подготовка данных, вызов функции построения и отображение результата. Ниже приведён минимальный пример.
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()библиотека matplotlib python (библиотека matplotlib для python)
Этот код создаёт простой линейный график синусоиды. Функция plt.plot() принимает массивы координат X и Y. Вызов plt.show() открывает окно с графиком. Для сохранения результата используется plt.savefig('file.png').
Типичные ошибки при первом запуске
Ошибка ImportError возникает при отсутствии установленного Matplotlib. Решение: выполнить pip install matplotlib в командной строке. Другая распространённая проблема – пустой график при использовании plt.show() в средах без графического вывода (например, сервер). В таких случаях применяется plt.savefig() или настройка бэкенда (matplotlib.use('Agg')).
Если на графике не отображаются русские буквы на подписях осей, необходимо указать шрифт: plt.rcParams['font.family'] = 'DejaVu Sans' или загрузить шрифт через font_manager. Иначе вместо текста появятся квадраты.
1. Как построить несколько линий на одном графике и добавить легенду?
Для отображения нескольких кривых достаточно вызвать plt.plot() несколько раз перед plt.show(). Легенда добавляется с помощью plt.legend(), предварительно назначив каждой линии метку через параметр label.
x = np.linspace(0, 5, 50)
plt.plot(x, x, label='линейная')
plt.plot(x, x**2, label='квадратичная')
plt.plot(x, x**0.5, label='квадратный корень')
plt.legend()
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Пример нескольких кривых')
plt.show()
Если легенда не появляется, проверьте, указан ли параметр label в каждом вызове plot(). Без него legend() не создаст записей. Также легенда может перекрывать данные – положение корректируют аргументом loc (например, 'upper left').
2. Как изменить стиль линий, цвет и маркеры?
Matplotlib предлагает множество настроек оформления. Формат строки в plot() позволяет задать цвет, тип линии и маркер: 'r--o' (красный пунктир с кружками). Также есть отдельные параметры.
plt.plot(x, y, color='green', linestyle='dashed', linewidth=2,
marker='s', markersize=6, markerfacecolor='white')
plt.show()
3. Как создать гистограмму и настроить её внешний вид?
Гистограмма строится функцией plt.hist(). Параметр bins задаёт количество столбцов, alpha – прозрачность.
data = np.random.randn(1000)
plt.hist(data, bins=30, alpha=0.7, edgecolor='black', color='steelblue')
plt.title('Гистограмма нормального распределения')
plt.xlabel('Значение')
plt.ylabel('Частота')
plt.show()
Гистограммы полезны для анализа распределения числовых переменных.
4. Как построить столбчатую диаграмму с подписями столбцов?
Для категориальных данных применяется plt.bar(). Подписи столбцов задаются через plt.xticks() или в самом вызове параметром tick_label.
categories = ['Яблоки', 'Груши', 'Бананы']
values = [30, 15, 42]
plt.bar(categories, values, color=['red', 'green', 'yellow'])
plt.xlabel('Фрукты')
plt.ylabel('Количество')
plt.title('Продажи фруктов')
plt.show()
При большом количестве категорий метки могут накладываться. Решение: повернуть их с помощью plt.xticks(rotation=45) или уменьшить размер шрифта.
5. Как отобразить несколько графиков на одной фигуре (subplots)?
Функция plt.subplots() возвращает объект фигуры и массив осей. Распределение задаётся количеством строк и столбцов.
fig, axes = plt.subplots(2, 2, figsize=(10, 6))
axes[0,0].plot(x, np.sin(x))
axes[0,0].set_title('Синус')
axes[0,1].plot(x, np.cos(x), 'r')
axes[1,0].hist(data, bins=20)
axes[1,1].bar(categories, values)
plt.tight_layout()
plt.show()
Метод tight_layout() автоматически выравнивает подписи и предотвращает их перекрытие.
6. Как создавать графики в стиле Seaborn без импорта Seaborn?
Matplotlib включает встроенные стили. Достаточно активировать один из них через plt.style.use('ggplot') или 'seaborn-v0_8' (в новых версиях).
plt.style.use('seaborn-v0_8')
plt.plot(x, y)
plt.show()
Стили меняют цветовую палитру, сетку и оформление по умолчанию.
7. Как добавить аннотации и текст непосредственно на график?
Аннотации помогают выделить важные точки. Используется plt.annotate() или plt.text().
x_point = 0.5
plt.plot(x, y)
plt.annotate('максимум', xy=(x_point, np.sin(x_point)),
xytext=(0.8, 0.9), arrowprops=dict(facecolor='black'))
plt.show()
Неправильные координаты для xytext (в долях координатной оси) могут привести к вылету аннотации за пределы графика. Рекомендуется использовать textcoords='offset points' для смещения в пунктах.
Расширенные примеры использования Matplotlib
Пример 1: 3D поверхность
Для построения трёхмерных графиков необходим дополнительный импорт mplot3d.
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
Z = np.sin(np.sqrt(X**2 + Y**2))
surf = ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')
fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_title('3D поверхность')
plt.show()
Результат: интерактивное окно с трёхмерной поверхностью, окрашенной по высоте.
Пример 2: Анимация в Matplotlib
Анимация создаётся с помощью модуля animation.
import matplotlib.animation as animation
fig, ax = plt.subplots()
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
line, = ax.plot([], [], lw=2)
def init():
line.set_data([], [])
return line,
def update(frame):
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x + frame/10)
line.set_data(x, y)
return line,
ani = animation.FuncAnimation(fig, update, frames=100, init_func=init, blit=True)
plt.show()
Результат: окно с анимированной синусоидой, перемещающейся влево-вправо.
Пример 3: Настройка цветовых карт и контурные графики
Контурные графики визуализируют трёхмерные данные на плоскости.
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X)*np.cos(Y)
plt.contourf(X, Y, Z, levels=20, cmap='plasma')
plt.colorbar(label='Значение Z')
plt.title('Контурный график с заливкой')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
Результат: двумерный цветной график, где цвет соответствует высоте функции.
Пример 4: Интерактивные элементы (псевдоинтерактивность через виджеты)
Matplotlib поддерживает виджеты для выбора диапазона или точек, но наиболее распространённая техника – использование mplcursors для подсказок.
import mplcursors
plt.plot(x, y, 'o')
mplcursors.cursor(hover=True)
plt.show()
Результат: при наведении мыши на точки отображаются их координаты.
Пример 5: Визуализация изображения как массива
Matplotlib может отображать растровые изображения с помощью imshow().
image = np.random.rand(50, 50) # случайный шум
plt.imshow(image, cmap='gray', interpolation='bilinear')
plt.colorbar()
plt.title('Случайное изображение')
plt.axis('off') # скрыть оси
plt.show()
Результат: квадратное серое изображение с плавными переходами.
Пример 6: Круговая диаграмма с процентными долями
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
colors = ['gold', 'lightcoral', 'lightskyblue', 'lightgreen']
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
plt.axis('equal')
plt.title('Круговая диаграмма')
plt.show()
Результат: круг, разделённый на цветные сектора с подписями и процентами.
Пример 7: Использование пользовательских шрифтов для кириллицы
import matplotlib.font_manager as fm
font_path = 'C:/Windows/Fonts/arial.ttf' # путь к шрифту с кириллицей
prop = fm.FontProperties(fname=font_path)
plt.plot(x, y)
plt.title('График с русским текстом', fontproperties=prop, fontsize=14)
plt.xlabel('Ось X', fontproperties=prop)
plt.ylabel('Ось Y', fontproperties=prop)
plt.show()
Результат: график с корректно отображающимися русскими буквами.