Matplotlib. Урок 3.5. Настройка графиков. Цветовая полоса – Colorbar

Автор: | 09.10.2019

Если вы строите цветовое распределение с использованием colormesh(), pcolor(), imshow() и т.п., то для отображения соответствия цвета и численного значения вам может понадобится аналог легенды, который в Matplotlib называется 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”.
Книга: Линейная алгебра на Python
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas.  Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге Pandas. Работа с данными”.
Книга: Pandas. Работа с данными

Поделиться
Share on VK
VK
Tweet about this on Twitter
Twitter
Share on Facebook
Facebook

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

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