В этом уроке будут подробно рассмотрены текстовые элементы графика, такие как заголовок подложки и поля графика, подписи осей, текстовые блоки и аннотации.
Текстовые элементы графика
В части текстового наполнения при построении графика выделяют следующие составляющие:
- заголовок поля (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
- Текст заголовка.
- fontdict : dict
- Словарь для управления отображением надписи, содержит следующие ключи:
- ‘fontsize’: размер шрифта,
- ‘fontweight’ : начертание ,
- ‘verticalalignment’: вертикальное выравнивание,
- ‘horizontalalignment’: горизонтальное выравнивание.
- Словарь для управления отображением надписи, содержит следующие ключи:
- loc : {‘center’, ‘left’, ‘right’}, str, optional
- Горизонтальное выравнивание.
- pad : float
- Зазор между заголовком и верхней частью поля графика.
Функция 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
- Текст подписи.
- fontdict : dict
- Словарь для управления отображением надписи, содержит следующие ключи:
- ‘fontsize’: размер шрифта,
- ‘fontweight’ : начертание ,
- ‘verticalalignment’: вертикальное выравнивание,
- ‘horizontalalignment’: горизонтальное выравнивание.
- Словарь для управления отображением надписи, содержит следующие ключи:
- labelpad : float
- Зазор между подписью и осью.
В самом простом случае достаточно передать только подпись в виде строки:
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: float
- Значение координаты y надписи.
- s: str
- Текст надписи.
Для более тонкой настройки внешнего вида воспользуйтесь свойствами класса 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
- Текст аннотации.
- xy : (float, float)
- Координаты места, на которое будет указывать стрелка.
- xytext : (float, float), optional
- Координаты расположения текстовой надписи.
- xycoords: str
- Система координат, в которой определяется расположение указателя.
- textcoords: str
- Система координат, в которой определяется расположение текстового блока.
- arrowprops : dict, optional
- Параметры отображения стрелки. Имена этих параметров (ключи словаря) являются параметрами конструктора объекта класса 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. Работа с данными”.