Если вы строите цветовое распределение с использованием colormesh(), pcolor(), imshow() и т.п., то для отображения соответствия цвета и численного значения вам может понадобится аналог легенды, который в Matplotlib называется colorbar.
- Общая настройка с использованием inset_locator()
- Задание шкалы и установка надписи
- Дополнительные параметры настройки colorbar
Для данного набора построим colorbar с помощью соответствующей функции:
np.random.seed(123) vals = np.random.randint(10, size=(7, 7)) plt.pcolor(vals) plt.colorbar()
Для дискретного разделения цветов на цветовой полосе, предварительно нужно при построении изображения в соответствующую функцию (в нашем случае pcolor()) через параметр cmap передать требуемую цветовую схему:
np.random.seed(123) vals = np.random.randint(10, size=(7, 7)) plt.pcolor(vals, cmap=plt.get_cmap('viridis', 11) ) plt.colorbar()
Рассмотрим различные варианты настройки цветовой полосы.
Общая настройка с использованием inset_locator()
Одни из вариантов более тонкой настройки цветовой полосы – это создать на базе родительского Axes элемента свой и модифицировать часть его параметров. Удобно делать это с помощью функции inset_axes из mpl_toolkits.axes_grid1.inset_locator. Основные ее аргументы перечислены в таблице ниже.
Параметр | Тип | Описание |
parent_axes | Axes | Родительский Axes объект |
width | float или str | Ширина объекта: может быть задана в процентах от родительского объекта, либо абсолютным значением в виде числа |
height | float или str | Высота объекта: может быть задана в процентах от родительского объекта, либо абсолютным значением в виде числа |
loc | int или string, optional, значение по умолчанию: 1 | Расположение объекта: может принимать значение из следующего набора:‘upper right’ : 1,‘upper left’ : 2,‘lower left’ : 3,‘lower right’ : 4,‘right’ : 5,‘center left’ : 6,‘center right’ : 7,‘lower center’ : 8,‘upper center’ : 9,‘center’ : 10 |
bbox_to_anchor | tuple или matplotlib.transforms.BboxBase или optional | Расположение и соотношение сторон объекта. Может быть задано в формате (левый угол, нижний угол, ширина, высота), либо (левый угол, нижний угол). |
bbox_transform | matplotlib.transforms.Transform или optional | Трансформация объекта |
borderpad | float или optional | Зазор между bbox_to_anchor и объектом |
Продемонстрируем работу с inset_axes на примере:
from mpl_toolkits.axes_grid1.inset_locator import inset_axes np.random.seed(123) vals = np.random.randint(11, size=(7, 7)) fig, ax = plt.subplots() gr = ax.pcolor(vals) axins = inset_axes(ax, width="7%", height="50%", loc='lower left', bbox_to_anchor=(1.05, 0., 1, 1), bbox_transform=ax.transAxes, borderpad=0, ) plt.colorbar(gr, cax=axins)
При необходимости можно модифицировать шкалу у цветовой полосы с помощью объекта класса Tick.
Задание шкалы и установка надписи
Для задания собственной шкалы необходимо передать соответствующий список в функцию colorbar() через параметр ticks. Надпись на шкале устанавливается с помощью параметра label, функции colorbar().
Модифицируйте последнюю строку из предыдущего примера следующим образом:
plt.colorbar(gr, cax=axins, ticks=[0, 5, 10], label='Value')
Если есть необходимость в установке текстовых надписей, то можно использовать функцию set_yticklabels():
cbar = plt.colorbar(gr, cax=axins, ticks=[0, 5, 10], label='Value') cbar.ax.set_yticklabels(['Low', 'Medium', 'High'])
Дополнительные параметры настройки colorbar()
Рассмотрим ряд параметров для настройки внешнего вида colorbar, которые доступны как аргументы соответствующей функции.
Свойство | Тип | Описание |
orientation | vertical или horizontal | Ориентация |
shrink | float | Масштабирование цветовой полосы |
extend | [ ‘neither’ | ‘both’ | ‘min’ | ‘max’ ] | Положение указателя продления шкалы |
extendfrac | [ None | ‘auto’ | length | lengths ] | Размер указателя продления шкалы |
drawedges | bool | Отображение разделительной сетки на цветовой полосе |
import numpy as np np.random.seed(123) vals = np.random.randint(10, size=(7, 7)) plt.pcolor(vals, cmap=plt.get_cmap('viridis', 11)) plt.colorbar(orientation='horizontal', shrink=0.9, extend='max', extendfrac=0.2, extendrect=False, drawedges=False)
P.S.
Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта. Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.