Matplotlib. Урок 3.3. Настройка графиков. Текстовые элементы графика
![]()
В этом уроке будут подробно рассмотрены текстовые элементы графика, такие как заголовок подложки и поля графика, подписи осей, текстовые блоки и аннотации.
- Текстовые элементы графика
- Заголовок подложки и поля графика
- Подписи осей графика
- Текстовый блок
- Аннотация
- Стиль стрелки
- Стиль соединительной линии
Текстовые элементы графика
В части текстового наполнения при построении графика выделяют следующие составляющие:
- заголовок поля ( title );
- заголовок фигуры ( suptitle );
- подписи осей ( xlabel , ylabel );
- тестовый блок на поле графика ( text ), либо на фигуре ( figtext );
- аннотация ( annotate ) – текст и указатель.
У каждого элемента, который содержит текст, помимо специфических параметров, отвечающих за его настройку, есть параметры класса Text , которые открывают доступ к довольно большому числу настроек внешнего вида и расположения текстового элемента. Более подробно описание параметров, доступных из класса Text , будет дано в одном из следующих уроков.
Ниже представлен код, отображающий все указанные выше текстовые элементы.
plt.figure(figsize=(10,4)) plt.figtext(0.5, -0.1, "figtext") plt.suptitle("suptitle") plt.subplot(121) plt.title("title") plt.xlabel("xlabel") plt.ylabel("ylabel") plt.text(0.2, 0.2, "text") plt.annotate("annotate", xy=(0.2, 0.4), xytext=(0.6, 0.7), arrowprops=dict(facecolor='black', shrink=0.05)) plt.subplot(122) plt.title("title") plt.xlabel("xlabel") plt.ylabel("ylabel") plt.text(0.5, 0.5, "text")
Большую часть из представленные текстовых элементов мы рассмотрели в “ Matplotlib . Урок 2. Работа с инструментом pyplot ”, в этом уроке изучим их более подробно.
Элементы графика, которые содержат текст, имеют ряд настроечных параметров, которые в официальной документации определяются как **kwargs . Это свойства класса matplotlib.text.Text , используемые для управления представлением текста.
Заголовок фигуры и поля графика
Начнем с заголовка поля графика. Текст заголовка для поля устанавливается с помощью функции title() , которая имеет следующие основные аргументы:
- label : str
- Текст заголовка.
- Словарь для управления отображением надписи, содержит следующие ключи:
- ‘fontsize’ : размер шрифта,
- ‘fontweight’ : начертание ,
- ‘verticalalignment’ : вертикальное выравнивание,
- ‘horizontalalignment’ : горизонтальное выравнивание.
- Горизонтальное выравнивание.
- Зазор между заголовком и верхней частью поля графика.
Функция title() также поддерживает в качестве аргументов свойства класса Text :
weight=['light', 'regular', 'bold'] plt.figure(figsize=(12, 4)) for i, lc in enumerate(['left', 'center', 'right']): plt.subplot(1, 3, i+1) plt.title(label=lc, loc=lc, fontsize=12+i*5, fontweight=weight[i], pad=10+i*15)

Заголовок фигуры задается с помощью функции suptitle() , аргументы этой функции аналогичны тем, что были рассмотрены для title() .
Подписи осей графика
Если вы работаете с pyplot , то для установки подписей осей графика используются функции labelx() и labely() . При работе с объектом Axes для этих целей подходят функции set_xlabel() и set_ylabel() .
Основные аргументы функций почти полностью совпадают с теми, что были описаны в функции title() :
- label : str
- Текст подписи.
- Словарь для управления отображением надписи, содержит следующие ключи:
- ‘fontsize’ : размер шрифта,
- ‘fontweight’ : начертание ,
- ‘verticalalignment’ : вертикальное выравнивание,
- ‘horizontalalignment’ : горизонтальное выравнивание.
- Зазор между подписью и осью.
В самом простом случае достаточно передать только подпись в виде строки:
x = [i for i in range(10)] y = [i*2 for i in range(10)] plt.plot(x, y) plt.xlabel("Ось X") plt.ylabel("Ось Y")
Используемые некоторые из дополнительных свойств для настройки внешнего вида подписей осей:
plt.plot(x, y) plt.xlabel("Ось X\nНезависимая величина", fontsize=14, fontweight="bold") plt.ylabel("Ось Y\nЗависимая величина", fontsize=14, fontweight="bold")
Текстовый блок
За установку текстовых блоков на поле графика отвечает функция text() . Через основные параметры этой функции можно задать расположение, содержание и настройки шрифта:
- x: float
- Значение координаты x надписи.
- Значение координаты y надписи.
- Текст надписи.
Для более тонкой настройки внешнего вида воспользуйтесь свойствами класса Text .
В простейшем варианте использование text() будет выглядеть так:
plt.text(0, 7, "HELLO!", fontsize=15) plt.plot(range(0,10), range(0,10))

Использование свойств класса Text , позволяет значительно модифицировать это представление:
bbox_properties=dict( boxstyle="darrow, pad=0.3", ec="k", fc="y", ls="-", lw=3 ) plt.text(2, 7, "HELLO!", fontsize=15, bbox=bbox_properties) plt.plot(range(0,10), range(0,10))

Аннотация
Инструмент Аннотация позволяет установить текстовый блок с заданным содержанием и стрелкой для конкретного места на графике. Аннотация – это мощный инструмент, остановимся на нем более подробно.
Для создания аннотации используется функция annotate() , основными ее аргументами являются:
- text : str
- Текст аннотации.
- Координаты места, на которое будет указывать стрелка.
- Координаты расположения текстовой надписи.
- Система координат, в которой определяется расположение указателя.
- Система координат, в которой определяется расположение текстового блока.
- Параметры отображения стрелки. Имена этих параметров (ключи словаря) являются параметрами конструктора объекта класса FancyArrowPatch .
Ниже представлен пример кода, который демонстрирует простой вариант использования annotation() :
import math x = list(range(-5, 6)) y = [i**2 for i in x] plt.annotate('min', xy=(0, 0), xycoords='data', xytext=(0, 10), textcoords='data', arrowprops=dict(facecolor='g')) plt.plot(x, y)
Параметрам xycoords и textcoords может быть присвоено значение из следующей таблицы:
Значение Описание ‘figure points’ Начало координат – это нижний левый угол фигуры (0, 0). Координаты задаются в точках. ‘figure pixels’ Начало координат – это нижний левый угол фигуры (0, 0). Координаты задаются в пикселях. ‘figure fraction’ Начало координат – это нижний левый угол фигуры (0, 0) при этом верхний правый угол – это точка (1, 1). Координаты задаются в долях от единицы. ‘axes points’ Начало координат – это нижний левый угол поля графика (0, 0). Координаты задаются в точках. ‘axes pixels’ Начало координат – это нижний левый угол поля графика (0, 0). Координаты задаются в пикселях. ‘axes fraction’ Начало координат – это нижний левый угол поля графика (0, 0) при этом верхний правый угол поля – это точка (1, 1). Координаты задаются в долях от единицы. ‘data’ Тип координатной системы: декартова. Работа ведется в пространстве поля графика. ‘polar’ Тип координатной системы: полярная. Работа ведется в пространстве поля графика. Рассмотрим настройку внешнего вида стрелки аннотации. За конфигурирование отображения стрелки отвечает параметр arrowprops , который принимает в качестве значения словарь, ключами которого являются параметры конструктора класса FancyArrowPatch , из них выделим два: arrowstyle , который отвечает за стиль стрелки и connectionstyle – отвечает за стиль соединительной линии.
Стиль стрелки
Параметр: arrowstyle
Тип: str, ArrowStyle, optional
Доступные стили стрелок представлены в таблице и на рисунке ниже.
Класс Имя Атрибуты Curve – None CurveB -> head_length=0.4, head_width=0.2 BracketB -[ widthB=1.0, lengthB=0.2, angleB=None CurveFilledB -|> head_length=0.4, head_width=0.2 CurveA head_length=0.4, head_width=0.2 CurveAB head_length=0.4, head_width=0.2 CurveFilledA <|- head_length=0.4, head_width=0.2 CurveFilledAB head_length=0.4, head_width=0.2 BracketA ]- widthA=1.0, lengthA=0.2, angleA=None BracketAB ]-[ widthA=1.0, lengthA=0.2, angleA=None, widthB=1.0, lengthB=0.2, angleB=None Fancy fancy head_length=0.4, head_width=0.4, tail_width=0.4 Simple simple head_length=0.5, head_width=0.5, tail_width=0.2 Wedge wedge tail_width=0.3, shrink_factor=0.5 
Программный код для построения изображения:
plt.figure(figsize=(7,5)) arrows = ["-", "->", "-[", "|-|", "-|>", "", "<|-", "<|-|>", "fancy", "simple", "wedge"] bbox_properties=dict( boxstyle="round,pad=0.2", ec="k", fc="w", ls="-", lw=1 ) ofs_x = 0 ofs_y = 0 for i, ar in enumerate(arrows): if i == 6: ofs_x = 0.5 plt.annotate(ar, xy=(0.4+ofs_x, 0.92-ofs_y), xycoords='data', xytext=(0.05+ofs_x, 0.9-ofs_y), textcoords='data', fontsize=17, bbox=bbox_properties, arrowprops=dict(arrowstyle=ar) ) if ofs_y == 0.75: ofs_y = 0 else: ofs_y += 0.15
Стиль соединительной линии
Параметр: connectionstyle
Тип: str, ConnectionStyle, or None, optional
Через данный параметр можно задать описание стиля линии, которая соединяет точки ( xy, xycoords ). В качестве значения данный параметр может принимать объект класса ConnectionStyle , или строку, в которой указывается стиль линии соединения с параметрами, перечисленными через запятую.
Класс Имя Атрибуты Angle angle angleA=90, angleB=0, rad=0.0 Angle3 angle3 angleA=90, angleB=0 Arc arc angleA=0, angleB=0, armA=None, armB=None, rad=0.0 Arc3 arc3 rad=0.0 Bar bar armA=0.0, armB=0.0, fraction=0.3, angle=None Ниже представлен пример, который демонстрирует возможности работы с параметром connectionstyle :
import math fig, axs = plt.subplots(2, 3, figsize=(12, 7)) conn_style=[ "angle,angleA=90,angleB=0,rad=0.0", "angle3,angleA=90,angleB=0", "arc,angleA=0,angleB=0,armA=0,armB=40,rad=0.0", "arc3,rad=-1.0", "bar,armA=0.0,armB=0.0,fraction=0.1,angle=70", "bar,fraction=-0.5,angle=180", ] for i in range(2): for j in range(3): axs[i, j].text(0.1, 0.5, "\n".join(conn_style[i*3+j].split(","))) axs[i, j].annotate('text', xy=(0.2, 0.2), xycoords='data', xytext=(0.7, 0.8), textcoords='data', arrowprops=dict(arrowstyle="->", connectionstyle=conn_style[i*3+j]) )
P.S.
Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта . Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Как установить значения оси X в Matplotlib

Вы можете использовать следующий синтаксис, чтобы установить значения оси x для графика в Matplotlib:
#specify x-axis locations x_ticks = [2, 4, 6, 8, 10] #specify x-axis labels x_labels = ['A', 'B', 'C', 'D', 'E'] #add x-axis values to plot plt.xticks (ticks=x_ticks, labels=x_labels)В следующих примерах показано, как использовать этот синтаксис на практике.
Пример 1. Установка значений оси X через равные интервалы
В следующем коде показано, как установить значения оси x через равные интервалы в Matplotlib:
import matplotlib.pyplot as plt #define x and y x = [1, 4, 10] y = [5, 11, 27] #create plot of x and y plt.plot (x, y) #specify x-axis locations x_ticks = [2, 4, 6, 8, 10] #specify x-axis labels x_labels = ['A', 'B', 'C', 'D', 'E'] #add x-axis values to plot plt.xticks (ticks=x_ticks, labels=x_labels)
Обратите внимание, что каждое значение по оси X отображается через равные промежутки времени.
Пример 2. Установка значений оси X через неравные интервалы
В следующем коде показано, как установить значения оси x через неравные интервалы в Matplotlib:
import matplotlib.pyplot as plt #define x and y x = [1, 4, 10] y = [5, 11, 27] #create plot of x and y plt.plot (x, y) #specify x-axis locations x_ticks = [1, 2, 6, 10] #specify x-axis labels x_labels = [1, 2, 6, 10] #add x-axis values to plot plt.xticks (ticks=x_ticks, labels=x_labels)
Пример 3: установка значений оси X только в точках данных
В следующем коде показано, как установить значения оси X только в точках данных:
import matplotlib.pyplot as plt #define x and y x = [1, 4, 10] y = [5, 11, 27] #create plot of x and y plt.plot (x, y) #specify x-axis labels x_labels = ['A', 'B', 'C'] #add x-axis values to plot plt.xticks (ticks=x, labels=x_labels)Примечание. Полную документацию по функции plt.xticks() можно найти здесь .
Как подписать оси на графике в Matplotlib Pyplot
Подскажите пожалуйста как подписать оси на графике построенном в библиотеке Matplotlib pyplot если оси выровнены по центру. Вот мой код:
import matplotlib.pyplot as plt import numpy as np a = 0.04 y = lambda x: a * np.sin(x) fig = plt.subplots() plt.title("First graphic: 0.04 * sin(x)") x = np.linspace(-10, 10, 100) plt.plot(x, y(x), "r-") ax = plt.gca() ax.spines['left'].set_position("center") ax.spines['bottom'].set_position('center') ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.set_xlabel("X", fontsize=15, color='blue') ax.set_ylabel("Y", fontsize=15, color='orange') plt.show()
Отслеживать
25k 4 4 золотых знака 20 20 серебряных знаков 36 36 бронзовых знаков
задан 22 сен 2020 в 19:12
111 4 4 серебряных знака 10 10 бронзовых знаков
Вот я выставил оси, но они почему-то выставились криво((( Может есть какие-то атрибуты выравнивания?
22 сен 2020 в 19:15
что именно у вас выставилось криво?
22 сен 2020 в 19:21@strawdog ну видите на картинке синий X и оранжевый игрек. Хотелось бы чтобы они было в другом виде. Ну как всегда мы графики подписываем
22 сен 2020 в 19:37
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Попробуйте добавить labelpad
import matplotlib.pyplot as plt import numpy as np a = 0.04 y = lambda x: a * np.sin(x) fig = plt.subplots() plt.title("First graphic: 0.04 * sin(x)") x = np.linspace(-10, 10, 100) plt.plot(x, y(x), "r-") ax = plt.gca() ax.spines['left'].set_position('center') ax.spines['bottom'].set_position('center') ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.set_xlabel("X", fontsize=15, color='blue', labelpad=120) # + ax.set_ylabel("Y", fontsize=15, color='orange', labelpad=140) # + ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') plt.show()
А случайно не знаете, игрек можно перевернуть или тут уже всё?
Попробуйте добавить rotation
import matplotlib.pyplot as plt import numpy as np a = 0.04 y = lambda x: a * np.sin(x) fig = plt.subplots() plt.title("First graphic: 0.04 * sin(x)") x = np.linspace(-10, 10, 100) plt.plot(x, y(x), "r-") ax = plt.gca() ax.spines['left'].set_position('center') ax.spines['bottom'].set_position('center') ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.set_xlabel("X", fontsize=15, color='blue', labelpad=120) # + ax.set_ylabel("Y", fontsize=15, color='orange', labelpad=140, rotation=0) # + ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') plt.show()Поворот подписей оси в matplotlib
Часто при работе с графиками в Matplotlib возникает проблема перекрытия подписей оси. Это особенно актуально, когда подписи достаточно длинные, например, даты или временные метки. В таких случаях подписи могут становиться слишком близко друг к другу и перекрывать друг друга, что затрудняет чтение графика.
Рассмотрим пример. Пусть есть график с временной осью, где подписи представляют собой временные метки:
import matplotlib.pyplot as plt import datetime time = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(10)] values = range(10) plt.plot(time, values) plt.show()
В результате подписи на оси X слишком близко друг к другу и перекрываются.
Для решения этой проблемы можно использовать поворот подписей оси. В библиотеке Matplotlib для этого предусмотрен метод xticks() , который позволяет установить угол поворота подписей.
Пример использования метода:
plt.plot(time, values) plt.xticks(rotation=90) plt.show()
В этом примере подписи оси X были повернуты на 90 градусов. Теперь они располагаются вертикально, и перекрытие подписей исключено.
Таким образом, поворот подписей оси в matplotlib является эффективным решением проблемы перекрытия подписей, особенно при работе с длинными подписями, например, датами или временными метками.
