Цветовая сетка представляет собой поле, заполненное цветом, который определяется заданной цветовой картой и численными значениями элементов переданного двумерного массива. Этот урок будет посвящен инструментам Matplotlib для построения цветовых сеток.
Цветовые карты (colormaps)
Цветовая карта представляет собой подготовленный набор цветов, который хорошо подходит для визуализации того или иного набора данных. Подробное руководство по цветовым картам вы можете найти на официальном сайте Matplotlib. Также отметим, что такие карты можно создавать самостоятельно, если среди существующих нет подходящего решения. Ниже представлены примеры некоторых цветовых схем, из библиотеки Matplotlib.
Построение цветовой сетки
Рассмотрим две функции для построения цветовой сетки: imshow() и pcolormesh().
imshow()
Основное назначение функции imshow() состоит в представлении 2d растров. Это могут быть картинки, двумерные массивы данных, матрицы и т.п. Напишем простую программу, которая загружает картинку из интернета по заданному URL и отображает ее с использованием библиотеки Matplotlib:
from PIL import Image import requests from io import BytesIO response = requests.get('https://matplotlib.org/_static/logo2.png') img = Image.open(BytesIO(response.content)) plt.imshow(img)
В результате получим изображение логотипа Matplotlib.
Создадим двумерный набор данных и отобразим его с помощью imshow():
np.random.seed(19680801) data = np.random.randn(25, 25) plt.imshow(data)
Рассмотрим некоторые из параметров функции imshow():
- X : массив или PIL изображение
- Поддерживаются следующие размерности массивов:
- (M, N): двумерный массив со скалярными данными.
- (M, N, 3): массив с RGB значениями (0-1 float или 0-255 int).
- (M, N, 4): массив с RGBA значениями (0-1 float или 0-255 int).
- Поддерживаются следующие размерности массивов:
- cmap: str или Colormap, optional
- Цветовая карта изображения (см. Цветовые карты)
- norm: Normalize, optional
- Нормализация – приведение скалярных данных к диапазону [0,1] перед использованием cmap. Этот параметр игнорируется для RGB(A) данных.
- aspect: {‘equal’, ‘auto’} или float, optional
- ‘equal’: обеспечивает соотношение сторон равное 1.
- ‘auto’: соотношение не изменяется.
- interpolation: str, optional
- Алгоритм интерполяции, доступны следующие значения: ‘none’, ‘nearest’, ‘bilinear’, ‘bicubic’, ‘spline16’, ‘spline36’, ‘hanning’, ‘hamming’, ‘hermite’, ‘kaiser’, ‘quadric’, ‘catrom’, ‘gaussian’, ‘bessel’, ‘mitchell’, ‘sinc’, ‘lanczos’.
- alpha: scalar, optional
- Прозрачность, определяется в диапазоне от 0 до 1. Параметр игнорируется для RGBA значения.
- vmin, vmax : численное значение, optional
- Численные значения vmin и vmax (если параметр norm не задан явно) определяют диапазон в данных, который будет покрыт цветовой картой. По умолчанию цветовая карта охватывает весь диапазон значений отображаемых данных. Если используется параметр norm, то vmin и vmax игнорируются.
- origin: {‘upper’, ‘lower’}, optional
- Расположение начал координат – точки [0,0]: ‘upper’ – верхний левый, ‘lower’ – нижний левый угол координатной плоскости.
- extent : scalars (left, right, bottom, top), optional
- Изменение размеров изображения вдоль осей x, y.
- filterrad: float > 0, optional, значение по умолчанию: 4.0
- Параметр filter radius для фильтров, которые его используют, например: ‘sinc’, ‘lanczos’ или ‘blackman’.
Построим пример, использующий параметры из приведенного выше списка:
fig, axs = plt.subplots(1, 2, figsize=(10,3), constrained_layout=True) p1 = axs[0].imshow(data, cmap='winter', aspect='equal', vmin=-1, vmax=1, origin="lower") fig.colorbar(p1, ax=axs[0]) p2 = axs[1].imshow(data, cmap='plasma', aspect='equal', interpolation='gaussian', origin="lower", extent=(0, 30, 0, 30)) fig.colorbar(p2, ax=axs[1])
pcolormesh()
Рассмотрим ещё одну функцию для визуализации 2D наборов данных – pcolormesh(). В библиотеке Matplotlib есть ещё одна функция с аналогичным функционалом – pcolor(), в отличии от нее рассматриваемая нами pcolormesh() более быстрая и является лучшим вариантом в большинстве случаев. Функция pcolormesh() похожа по своим возможностям на imshow(), но есть и отличия.
Рассмотрим параметры функции pcolormesh():
- C: массив
- 2D массив скалярных значений
- cmap: str или Colormap, optional
- См. cmap в imshow()
- norm : Normalize, optional
- См. cmap в imshow()
- vmin, vmax : scalar, optional, значение по умолчанию: None
- См. vmin, vmax в imshow()
- edgecolors : {‘none’, None, ‘face’, color, color sequence}, optional
- Цвет границы, по умолчанию: ‘none’, возможны следующие варианты:
- ‘none’ or ”: без отображения границы.
- None: черный цвет.
- ‘face’: используется цвет ячейки.
- Можно выбрать цвет из доступных наборов.
- Цвет границы, по умолчанию: ‘none’, возможны следующие варианты:
- alpha : scalar, optional, значение по умолчанию: None
- См. alpha в imshow().
- shading : {‘flat’, ‘gouraud’}, optional
- Стиль заливки, доступные значения:
- ‘flat’: сплошной цвет заливки для каждого квадрата.
- ‘gouraud‘: для каждого квадрата будет использован метод затенения Gouraud.
- Стиль заливки, доступные значения:
- snap : bool, optional, значение по умолчанию: False
- Привязка сетки к границам пикселей.
Пример использования функции pcolormesh():
np.random.seed(123) data = np.random.rand(5, 7) plt.pcolormesh(data, cmap='plasma', edgecolors="k", shading='flat')
P.S.
Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта. Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.