W3docs

Метки в Matplotlib

Научитесь добавлять и настраивать метки осей, заголовки, легенды, подписи делений и текстовые аннотации в Matplotlib с примерами на Python.

Метки превращают сырой график в читаемую историю. В этой главе рассматриваются все основные элементы меток в Matplotlib: подписи осей, заголовки графиков, легенды, подписи делений и текстовые аннотации. Для каждого элемента вы увидите необходимую функцию, её наиболее полезные параметры и практические примеры, которые можно запустить прямо сейчас.

Перед началом убедитесь, что Matplotlib установлен. Инструкции по установке см. в разделе Начало работы с Matplotlib.

Установка подписей осей

Функции xlabel() и ylabel() добавляют описательный текст к горизонтальной и вертикальной осям. Обе принимают одинаковые параметры.

import matplotlib.pyplot as plt

height = [63, 64, 65, 66, 67, 68, 69, 70, 71, 72]
weight = [127, 130, 133, 136, 139, 142, 145, 148, 151, 154]

plt.scatter(height, weight)
plt.xlabel('Height (inches)')
plt.ylabel('Weight (pounds)')
plt.show()

Настройка внешнего вида подписей

Обе функции принимают аргумент fontsize (в пунктах) и любые ключевые слова класса Text в Matplotlib, такие как color, fontweight и fontstyle.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.plot(x, y)
plt.xlabel('Time (seconds)', fontsize=13, color='steelblue', fontweight='bold')
plt.ylabel('Distance (meters)', fontsize=13, color='steelblue', fontweight='bold')
plt.show()

Настройка отступа подписи

Используйте параметр labelpad, чтобы увеличить расстояние между подписью и делениями оси — это удобно, когда подписи делений длинные или повёрнуты.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [1000, 2000, 3000, 4000, 5000]

plt.plot(x, y)
plt.xlabel('Quarter', labelpad=12)
plt.ylabel('Revenue ($)', labelpad=16)
plt.show()

Добавление заголовка графика

Функция title() по умолчанию добавляет заголовок, центрированный над графиком.

import matplotlib.pyplot as plt

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
sales = [25000, 30000, 45000, 35000, 50000, 60000,
         70000, 80000, 90000, 100000, 110000, 120000]

plt.plot(months, sales)
plt.title('Monthly Sales')
plt.xlabel('Month')
plt.ylabel('Sales ($)')
plt.show()

Позиция и стиль заголовка

Передайте параметр loc ('left', 'center', 'right') для изменения горизонтального выравнивания и pad для управления отступом между заголовком и верхней частью графика.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [3, 7, 2, 9, 4]

plt.plot(x, y, marker='o')
plt.title('Sensor Readings', loc='left', pad=14,
          fontsize=15, fontweight='bold', color='darkslategray')
plt.show()

Общий заголовок фигуры с suptitle()

Если фигура содержит несколько подграфиков, используйте suptitle(), чтобы добавить один заголовок, охватывающий их все. У отдельных подграфиков могут быть свои собственные title().

import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 3))

ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Product A')

ax2.plot([1, 2, 3], [6, 5, 4])
ax2.set_title('Product B')

fig.suptitle('Q1 Sales Comparison', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()

tight_layout() предотвращает перекрытие заголовка фигуры с содержимым подграфиков. Подробное рассмотрение многопанельных фигур см. в разделе Подграфики Matplotlib.

Настройка легенды

Легенда идентифицирует ряды данных на вашем графике. Вызывайте legend() после построения рядов.

Базовая легенда

Передайте ключевое слово label каждому вызову построения, затем вызовите plt.legend() для её отображения.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]

plt.plot(x, [2, 4, 6, 8, 10], label='Series A')
plt.plot(x, [1, 3, 5, 7, 9],  label='Series B')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('Two Series')
plt.show()

Расположение легенды

Передайте параметр loc для точного размещения легенды. Распространённые значения: 'upper left', 'upper right', 'lower left', 'lower right', 'center' или 'best' (Matplotlib выбирает позицию с наименьшим перекрытием — значение по умолчанию).

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]

plt.plot(x, [2, 4, 6, 8, 10], label='Revenue')
plt.plot(x, [1, 2, 3, 4, 5],  label='Costs')
plt.legend(loc='upper left')
plt.show()

Легенда за пределами осей

Используйте bbox_to_anchor совместно с loc, чтобы разместить легенду за пределами области графика. Вызовите tight_layout() или настройте subplots_adjust, чтобы легенда не обрезалась.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
fig, ax = plt.subplots()

ax.plot(x, [1, 4, 9, 16],  label='Quadratic')
ax.plot(x, [1, 8, 27, 64], label='Cubic')
ax.legend(loc='upper left', bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()

Стилизация легенды

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]

plt.plot(x, [2, 4, 6, 8, 10], label='Actual')
plt.plot(x, [1, 3, 5, 7, 9],  label='Forecast', linestyle='--')
plt.legend(
    title='Data',
    fontsize=11,
    title_fontsize=12,
    framealpha=0.9,
    edgecolor='gray',
)
plt.show()

framealpha управляет непрозрачностью рамки легенды (0 = прозрачная, 1 = непрозрачная). title добавляет заголовок внутри рамки легенды.

Настройка подписей делений

Подписи делений — это числа или строки, которые Matplotlib выводит вдоль каждой оси. Используйте xticks() и yticks() для их переопределения.

Поворот подписей делений

Длинные названия категорий по умолчанию перекрываются. Поверните их с помощью параметра rotation.

import matplotlib.pyplot as plt

categories = ['January', 'February', 'March', 'April', 'May', 'June']
values = [12, 19, 14, 22, 18, 25]

plt.bar(categories, values)
plt.xticks(rotation=45, ha='right')
plt.ylabel('Units sold')
plt.title('Monthly Sales')
plt.tight_layout()
plt.show()

ha='right' выравнивает правый край каждой подписи по её делению, что выглядит аккуратнее после поворота.

Установка пользовательских значений и подписей делений

Передайте два списка в xticks(): позиции делений и строки для отображения.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))

ticks = [0, np.pi / 2, np.pi, 3 * np.pi / 2, 2 * np.pi]
labels = ['0', 'π/2', 'π', '3π/2', '2π']
plt.xticks(ticks, labels, fontsize=12)
plt.ylabel('sin(x)')
plt.title('Sine Wave with Custom Tick Labels')
plt.show()

Стилизация шрифта подписей делений

Функции xticks() и yticks() напрямую принимают ключевые аргументы шрифта.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 30, 25]

plt.plot(x, y)
plt.xticks(fontsize=12, color='steelblue')
plt.yticks(fontsize=12, color='steelblue')
plt.show()

Добавление текстовых аннотаций

Функция text() помещает строку в произвольную позицию внутри системы координат осей.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 3, 6, 5]

plt.plot(x, y, marker='o')
plt.text(3, 3.2, 'dip here', fontsize=11, color='crimson')
plt.title('Text Annotation Example')
plt.show()

Первые два аргумента — это координаты x и y в единицах данных.

Аннотация со стрелкой

annotate() рисует подпись с необязательной стрелкой, указывающей на конкретную точку данных. Это подходящий инструмент, когда нужно выделить выбросы или пики.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [4, 7, 2, 9, 3]

plt.plot(x, y, marker='o')
plt.annotate(
    'Peak',
    xy=(4, 9),           # tip of the arrow (the data point)
    xytext=(3.2, 9.5),   # where the label sits
    arrowprops=dict(arrowstyle='->', color='black'),
    fontsize=12,
)
plt.title('Annotated Line Plot')
plt.show()

Объектно-ориентированный API: использование методов Axes

Все перечисленные выше функции являются удобными обёртками вокруг текущих активных осей. При работе с несколькими подграфиками — или когда нужен точный контроль — используйте методы объекта Axes напрямую: ax.set_xlabel(), ax.set_ylabel(), ax.set_title(), ax.legend() и ax.set_xticks().

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

months = ['Jan', 'Feb', 'Mar', 'Apr']
revenue = [12000, 15000, 13000, 18000]
costs   = [8000,  9000, 10000, 11000]

ax.plot(months, revenue, marker='o', label='Revenue')
ax.plot(months, costs,   marker='s', label='Costs', linestyle='--')

ax.set_xlabel('Month', fontsize=12)
ax.set_ylabel('Amount ($)', fontsize=12)
ax.set_title('Revenue vs Costs — Q1', fontsize=14)
ax.legend(loc='upper left')

plt.tight_layout()
plt.show()

Предпочитайте объектно-ориентированный стиль, когда скрипт создаёт более одного набора осей. Сокращения plt.* перенаправляются к текущим активным осям, что в многопанельных фигурах может порождать трудноотслеживаемые ошибки.

Краткий справочник

ЗадачаФункция (pyplot)Метод (Axes)
Подпись оси Xplt.xlabel()ax.set_xlabel()
Подпись оси Yplt.ylabel()ax.set_ylabel()
Заголовок графикаplt.title()ax.set_title()
Заголовок фигурыplt.suptitle()fig.suptitle()
Легендаplt.legend()ax.legend()
Подписи делений Xplt.xticks()ax.set_xticks() / ax.set_xticklabels()
Подписи делений Yplt.yticks()ax.set_yticks() / ax.set_yticklabels()
Произвольный текстplt.text()ax.text()
Аннотация со стрелкойplt.annotate()ax.annotate()

Связанные главы

Was this page helpful?