Matplotlib. Урок 4.4. Визуализация данных. Цветовая сетка

Автор: | 29.10.2019

Цветовая сетка представляет собой поле, заполненное цветом, который определяется заданной цветовой картой и численными значениями элементов переданного двумерного массива. Этот урок будет посвящен инструментам 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’: используется цвет ячейки.
      • Можно выбрать цвет из доступных наборов.
  • 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”.
Книга: Линейная алгебра на Python
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas.  Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге Pandas. Работа с данными”.
Книга: Pandas. Работа с данными

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

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

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