Как подписать оси в matplotlib
Перейти к содержимому

Как подписать оси в matplotlib

  • автор:

Text in Matplotlib Plots#

Introduction to plotting and working with text in Matplotlib.

Matplotlib has extensive text support, including support for mathematical expressions, truetype support for raster and vector outputs, newline separated text with arbitrary rotations, and Unicode support.

Because it embeds fonts directly in output documents, e.g., for postscript or PDF, what you see on the screen is what you get in the hardcopy. FreeType support produces very nice, antialiased fonts, that look good even at small raster sizes. Matplotlib includes its own matplotlib.font_manager (thanks to Paul Barrett), which implements a cross platform, W3C compliant font finding algorithm.

The user has a great deal of control over text properties (font size, font weight, text location and color, etc.) with sensible defaults set in the rc file . And significantly, for those interested in mathematical or scientific figures, Matplotlib implements a large number of TeX math symbols and commands, supporting mathematical expressions anywhere in your figure.

Basic text commands#

The following commands are used to create text in the implicit and explicit interfaces (see Matplotlib Application Interfaces (APIs) for an explanation of the tradeoffs):

Как подписать оси на графике в Matplotlib Pyplot

Подскажите пожалуйста как подписать оси на графике построенном в библиотеке Matplotlib pyplot если оси выровнены по центру. Вот мой код:

вот я выставил оси, но они выставились очень криво( Может есть какой-то атрибут выравнивания?

strawdog's user avatar

Попробуйте добавить labelpad

введите сюда описание изображения

А случайно не знаете, игрек можно перевернуть или тут уже всё?

Попробуйте добавить rotation

введите сюда описание изображения

S. Nick's user avatar

Вы можете вручную располагать маркеры осей, принимая во внимание, что для маркеров начало координат находится в левом нижнем углу и позиция измеряется в долях от единицы:

введите сюда описание изображения

strawdog's user avatar

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.13.43310

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Визуализация данных в Matplotlib

Matplotlib — библиотека на языке программирования Python для визуализации данных двумерной (2D) графикой (3D графика также поддерживается). Получаемые изображения могут быть использованы в качестве иллюстраций в публикациях[4].

Matplotlib написан и поддерживался в основном Джоном Хантером (англ. John Hunter) и распространяется на условиях BSD-подобной лицензии. Генерируемые в различных форматах изображения могут быть использованы в интерактивной графике, в научных публикациях, графическом интерфейсе пользователя, веб-приложениях, где требуется построение диаграмм (англ. plotting)[5][6]. В документации автор признаётся, что Matplotlib начинался с подражания графическим командам MATLAB, но является независимым от него проектом

Установка

Для установки используйте пакетный менеджер:

Импорт

Для отображения графиков в notebook’е введите

Благодаря этой строчке все графики будут выводиться в векторном формате svg:

Для отображения графиков в отрыве от jupyter notebook используйте plt.show() после всех команд для вывода графиков.

API matplotlib в функциональном стиле

Example

В отличии от pandas, matplotlib может строить графики из обычных списков или массивов numpy.

12.1. Теория¶

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

В Python визуализация данных легко осуществляется с использованием сторонних пакетов, среди которых одним из наиболее известных является библиотека matplotlib.

12.1.1. Описание и установка¶

Matplotlib распространяется на условиях BSD-подобной лицензии. Библиотека поддерживает двумерную (2D) и трехмерную (3D) графику, а также анимированные рисунки.

Создаваемые изображения могут быть использованы в мультимедийных приложениях, научных проектах, а также различных документах, публикациях и веб-приложениях. Исторически библиотека формировалась под влиянием математического пакета Matlab, но являлась и является независимым от него проектом. Построенная на принципах ООП, библиотека также имеет процедурный интерфейс pylab, который предоставляет аналоги команд Matlab.

Последняя стабильная версия библиотеки поддерживает Python 2.6 и выше. В курсе рассматривается matplotlib версии 2+.

Пакет поддерживает многие виды диаграмм:

столбчатые диаграммы и гистограммы;

При построении возможно указать оси координат, сетку, добавить аннотации, использовать логарифмическую шкалу или полярные координаты. Созданные изображения могут быть легко сохранены, в частности, в популярные форматы (JPEG, PNG и др.).

Пример изображений приведен на Рисунке 12.1.1.

_images/12_01_01.png

Рисунок 12.1.1 — Пример изображений, построенных с использованием matplotlib 10 ¶

На странице скриншотов, а также в демонстрационной галерее библиотеки приведен обширный список примеров, включающих изображения и соответствующий код.

Как и любой пакет matplotlib можно установить, используя утилиту pip:

Пользователям ОС на базе Linux можно воспользоваться пакетным менеджером и установить python3-matplotlib.

После установки проверьте, что библиотека имеет версию 3 и выше:

Дополнительная информация об установке находится в официальном руководстве по инсталляции.

12.1.2. Основы matplotlib¶

В matplotlib все объекты организованы в единую иерархию:

На вершине иерархии находится конечный автомат (модель, число возможных внутренних состояний которой конечно), предоставляемый модулем matplotlib.pyplot . На данном уровне все функции, используемые для рисования диаграмм (линии, рисунки, текст и т.д.) применяются к текущему изображению.

На уровне ниже располагается объектно-ориентированный интерфейс, используемый для создания изображений, где объектами являются само изображение, оси координат, графические примитивы и т.д.

12.1.2.1. Типы используемых величин¶

Все функции построения диаграмм ожидают аргументы следующих типов:

— набор или массив значений из пакета NumPy (устанавливается вместе с matplotlib), однако стандартные последовательности Python также допускаются к использованию.

NumPy — фундаментальный пакет для научных вычислений на Python, который содержит:

мощный объект — многомерный массив (в т.ч. матрицы);

высокоуровневые функции для работы с массивами, линейной алгеброй и а также быстрого создания набора данных (примерный аналог — функция range() );

инструменты для интеграции кода на C/C++ и Fortran.

Пакет NumPy не рассматривается отдельно в данном курсе.

12.1.2.2. Основные модули и классы matplotlib¶

12.1.2.2.1. Модуль matplotlib ¶

Модуль верхнего уровня matplotlib содержит функции для конфигурации библиотеки.

matplotlib. rc ( group , ** kwargs ) ¶

Устанавливает параметры **kwargs для группы объектов group (например, "font" для шрифта).

Данная функция может оказаться полезной, если шрифт в ОС по умолчанию не поддерживает кириллицу:

12.1.2.2.2. Элементы изображения¶

На Рисунке 12.1.2 представлены основные элементы изображения.

_images/12_01_02.png

Рисунок 12.1.2 — Основные элементы изображения в matplotlib ¶

Изображение может содержать несколько диаграмм, каждая из которых будет представлять собой Рисунок 12.1.2.

Все элементы изображения унаследованы от класса Artists (модуль artist) и делятся на 2 типа:

Стандартные графические объекты на изображении: линия (класс Line2D), прямоугольник (класс Rectangle), текст (класс Text) и т.д.

Контейнеры — объекты, внутри которых размещаются примитивы: координатная плоскость (класс Axes), оси (класс Axis) или изображение (класс Figure).

12.1.3. Создание изображений¶

12.1.3.1. Построение простой диаграммы¶

Типичный ход построения изображения, как правило, включает следующие шаги:

Создать объект Figure .

Используя объект Figure , добавить координатную плоскость Axes (одну или несколько).

Используя методы Axes , добавить на изображение графические примитивы.

Отобразить и/или сохранить изображение.

Пример построения изображения приведен в Листинге 12.1.1.

Одним из способом создания изображения и координатной оси является функция pyplot.subplots().

matplotlib.pyplot. subplots ( nrows = 1 , ncols = 1 , sharex = False , sharey = False , squeeze = True , subplot_kw = None , gridspec_kw = None , ** fig_kw ) ¶

nrows (int) – количество координатных плоскостей по вертикали;

ncols (int) – количество координатных плоскостей по горизонтали;

является ли ось OX общей для нескольких плоскостей:

True или "all" : оси OX и OY будут общими для всех координатных плоскостей;

False или "none" : оси OX и OY будут отдельными для каждой координатной плоскости;

"row" : оси OX и OY будут общими для всех координатных плоскостей по вертикали;

"col" : оси OX и OY будут общими для всех координатных плоскостей по горизонтали.

sharey (bool или <"none", "all", "row", "col">) – является ли ось OY общей для нескольких плоскостей (аналогично параметру „sharex“);

fig: изображение (класс Figure);

ax: одна или несколько координатных плоскостей (класс Axes).

Для вывода полученного изображения на экран используется функция pyplot.show().

matplotlib.pyplot. show ( * args , ** kw ) ¶

Выводит изображение на экран в отдельном окне (Рисунок 12.1.3).

_images/12_01_03.png

Рисунок 12.1.3 — Выполнение кода из Листинга 12.1.1. ¶

Кроме диаграммы графическое окно содержит специальные функциональные кнопки (интерактивную навигацию, пронумерована на Рисунке 12.1.3), их назначение и возможности приведены в Таблице 12.1.1.

Таблица 12.1.1 — Интерактивная навигация графического окна ¶

Возвращает график к первоначальному состоянию (вид при первом запуске)

Перемещает назад / вперед по истории изменения графика. Например, после увеличения определенной области можно вернуться к предыдущему, не увеличенному виду, используя кнопку 2

Перетаскивает (левая кнопка мыши) или масштабирует (правая кнопка мыши) график

Масштабирует заданную прямоугольную область графика

Открывает дополнительные настройки окна (например, отступы от краев)

Вызывает диалог сохранения графика в файл

Сохранение получившегося изображения также может быть выполнено программно, используя функцию pyplot.savefig().

matplotlib.pyplot. savefig ( fname , dpi = None , facecolor = ‘w’ , edgecolor = ‘w’ , orientation = ‘portrait’ , papertype = None , format = None , transparent = False , bbox_inches = None , pad_inches = 0.1 , frameon = None ) ¶

Сохраняет текущее изображение.

fname – имя файла или файловый объект.

Необязательные параметры контролируют значения dpi (англ. Dots Per Inch — количество точек на дюйм), ориентацию (альбомная или портретная), прозрачность, отступы и т.д.

12.1.3.2. Заголовок диаграммы и подписи осей¶

Диаграмма в maplotlib может иметь:

Установить заголовок диаграммы.

label (str) – заголовок диаграммы.

class matplotlib.pyplot. Axes ¶ set_xlabel ( xlabel , fontdict = None , labelpad = None , ** kwargs ) ¶

Установить подпись оси OX.

xlabel (str) – подпись оси OX.

set_ylabel ( ylabel , fontdict = None , labelpad = None , ** kwargs ) ¶

Установить подпись оси OY.

ylabel (str) – подпись оси OY.

12.1.3.3. Координатная сетка и масштабирование¶

Координатная плоскость поддерживает настройку:

координатной сетки (метод Axes.grid());

Отобразить сетку координатной плоскости.

set_aspect ( aspect , adjustable = None , anchor = None ) ¶

Установить соотношение сторон (осей) координатной плоскости.

"auto" (по умолчанию): максимальное заполнение координатной плоскости;

"equal" : соотношение осей OX и OY как 1:1;

num : ось OY растянута в num раз больше, чем OX.

set_xlim ( left = None , right = None , emit = True , auto = False , ** kw ) ¶

Установить пределы значений [left; right] по оси OX.

кортеж — новые пределы по оси OX.

set_ylim ( bottom = None , top = None , emit = True , auto = False , ** kw ) ¶

Установить пределы значений [bottom; top] по оси OY.

кортеж — новые пределы по оси OY.

Словарь — линии осей координат (класс Spines):

  • "left" (левая);

  • "bottom" (нижняя);

  • "right" (правая);

  • "top" (верхняя).

Для изменения позиции конкретной линии оси координат используется метод Spines.set_position().

class Spines ¶ set_position ( position ) ¶

Перемещает линию оси координат в позицию position .

12.1.3.4. Легенда¶

Matplotlib также поддерживает добавление легенды — условного обозначения значений различных рядов данных на диаграмме (метод Axes.legend()).

class matplotlib.pyplot. Axes ¶ legend ( * args , ** kwargs ) ¶

Размещает легенду на координатной плоскости.

loc

"upper right" (по умолчанию),

12.1.3.5. Текст и аннотациии¶

На диаграмму также имеется возможность добавить:

произвольный текст (метод Axes.text());

Текст в matplotlib поддерживает известный научный формат TeX (произносится как «тех»), позволяющий записывать сложные математические выражения.

class matplotlib.pyplot. Axes ¶ text ( x , y , s , fontdict = None , withdash = False , ** kwargs ) ¶

Добавляет текст s на координатную плоскость в координаты (x, y) (левый верхний угол).

Возможные ключи **kwargs — свойства текстового объекта (класс Text), определяющие отображение текста.

Добавляет аннотацию s на координатную плоскость в координаты (x, y) .

s (str) – текст аннотации;

xy (итерируемый объект из 2-х элементов) – координаты точки аннотации;

xytext (итерируемый объект из 2-х элементов) – координаты текста аннотации (по умолчанию равен параметру „xy“, левый верхний угол);

arrowprops (dict) – свойства стрелки-указателя на аннотацию.

В Листинге 12.1.2 и на Рисунке 12.1.4 приведен пример использования ряда функций для построения диаграммы.

_images/12_01_04.png

Рисунок 12.1.4 — Заголовки, подписи и другие элементы графика в matplotlib ¶

12.1.3.6. Несколько диаграмм в изображении¶

В ряде случаев удобно иметь несколько диаграмм в рамках одного изображения. matplotlib позволяет это сделать, используя функцию matplotlib.pyplot.subplots() , указав параметры разбиения изображения (Листинге 12.1.3, Рисунок 12.1.5).

_images/12_01_05.png

Рисунок 12.1.5 — Несколько диаграмм в изображении в matplotlib ¶

Доступ к любой из координатных плоскостей можно получить сохранив их при вызове функции matplotlib.pyplot.subplots() или через функцию Figure.get_axes().

12.1.4. Основные типы диаграмм¶

Класс matplotlib.axes.Axes содержит множество методов для рисования диаграмм различного типа (Таблица 12.1.2).

Таблица 12.1.2 — Основные типы диаграмм 6 7 8 9 ¶

_images/12_01_01_i.png

_images/12_01_02_i.png

Столбчатая (линейчатая) диаграмма

_images/12_01_03_i.png

_images/12_01_04_i.png

Диаграммы можно комбинировать, вызывая последовательно разные методы: например, на одной диаграмме может быть нарисована столбчатая диаграмма и график одновременно.

12.1.4.1. График¶

График (в т.ч. точечная диаграмма) является одним из самых простых способов отображения зависимости в графическом виде и может быть нарисован с использованием метода Axes.plot().

class matplotlib.pyplot. Axes ¶ plot ( * args , ** kwargs ) ¶

Рисует линии и/или точки (маркеры) на координатной плоскости.

args – аргумент переменной длины, содержащий набор точек для осей OX и OY, а также произвольный текста и параметры графика;

kwargs – стиль и свойства линий.

список добавленных на координатную плоскость линий;

Стиль и свойства линии могут быть заданы как через позиционные аргументы args , так и ключевые — kwargs :

В случае, когда значения являются датой, удобнее использовать метод Axes.plot_date().

12.1.4.1.1. Стили линий¶

Линии (класс Line2D) графика могут иметь различные стили: тип, толщину, цвет, форму и т.д.

class matplotlib.lines. Line2D ( xdata , ydata , linewidth = None , linestyle = None , color = None , marker = None , markersize = None , markeredgewidth = None , markeredgecolor = None , markerfacecolor = None , markerfacecoloralt = ‘none’ , fillstyle = None , antialiased = None , dash_capstyle = None , solid_capstyle = None , dash_joinstyle = None , solid_joinstyle = None , pickradius = 5 , drawstyle = None , markevery = None , ** kwargs ) ¶

Параметр kwargs при создании графика может содержать соответствующие свойства линии.

Некоторые атрибуты линии:

class matplotlib.lines. Line2D ¶ axes ¶

Координатная плоскость, которой принадлежит линия.

Цвет линии, который может быть задан:

в шестандцатеричном формате "#00FF00" ;

RGB (0, 1, 0) или RGBA (0, 1, 0, 1) кортежем;

оттенком серого в виде строки "0.8" .

Если не указывать цвет, matplotlib выберет его самостоятельно.

Наименование линии (используется, в частности, для легенды).

Толщина линии (вещественное число).

Тип маркера для точки графика (по умолчанию отсутствуют), например:

Полный список маркеров указан в документации: matplotlib.markers.

Цвета маркеров определяются атрибутами markeredgecolor , markeredgewidth , markerfacecolor , markerfacecoloralt .

В Листинге 12.1.4 и на Рисунке 12.1.6 приведен пример создания графика с линиями различного стиля.

_images/12_01_06.png

Рисунок 12.1.6 — Различные стили линий графика ¶

12.1.4.2. Круговая диаграмма¶

Круговая диаграмма отображает размер элементов одного ряда данных относительно суммы элементов, а точки данных на круговой диаграмме выводятся как проценты от всего круга.

Круговая диаграмма может быть нарисована с использованием метода Axes.pie().

class matplotlib.lines. Axes ¶ pie ( x , explode = None , labels = None , colors = None , autopct = None , pctdistance = 0.6 , shadow = False , labeldistance = 1.1 , startangle = None , radius = None , counterclock = True , wedgeprops = None , textprops = None , center = (0, 0) , frame = False ) ¶

Рисует круговую диаграмму для значений x , где доля круга определяется, как x/sum(x) .

По умолчанию доли (сектора) рисуются против часовой стрелки относительно оси OX.

x – набор значений (обязательный параметр);

colors – набор значений цветов секторов;

labels – набор подписей для секторов;

autopct – форматная строка или функция для отображения значения доли на секторах круга;

shadow (bool) – рисует тень, если True ;

radius – радиус круга (по умолчанию: 1).

В Листинге 12.1.5 и на Рисунке 12.1.6 приведен пример создания круговой диаграммы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *