Повысьте уровень своей игры с диаграммами с помощью настраиваемых цветовых карт в соответствии с вашей темой.

Если вашей диаграмме Matplotlib нужна палитра, а вы не используете встроенную карту, скорее всего, у вас будут плохие времена. Раньше я боялся редактировать палитру в Python. Каждая ветка справки, на которую я смотрел, показывала разные подходы, и ни один из них не соответствовал моей ситуации. Это всегда разочаровывало, потому что цветовые карты могут значительно изменить сообщение, которое вы отправляете с помощью визуализации данных, и даже могут зайти так далеко, что сделать вашу диаграмму непригодной для использования.

Не верите мне? Проверь это.

Каждая из этих визуализаций показывает идентичные данные (приблизительную численность населения в районах местного самоуправления в Австралии), но с разными цветовыми картами. Данные являются непрерывными и положительными, что подтверждается тщательным изучением легенды для каждого из них. Однако цветовые карты рассказывают другую историю, немного похожую на сказку о Златовласке:

  1. Первая диаграмма использует последовательную цветовую карту, где значение яркости изменяется (увеличивается или уменьшается) монотонно на всем протяжении. Если детали в вашей визуализации важны, то последовательное отображение, вероятно, не лучший вариант, поскольку может быть сложно сравнивать области с похожими значениями.
  2. Вторая диаграмма использует расходящуюся цветовую карту. С большим количеством цветов легче определить разницу между похожими значениями, но это также предполагает, что данные сосредоточены вокруг нормальной базовой линии, например нуля. Если бы мы нормализовали наши данные о среднем значении, эта шкала была бы подходящей, но поскольку мы просто показываем диапазон положительных значений, она здесь не работает.
  3. Третий график в самый раз. Это похоже на последовательную карту, поскольку цвет постепенно меняется на всем протяжении, причем один конец четко указывает на более высокие значения, а другой - на более низкие значения. Однако эта карта включает больше цветов, что позволяет наблюдателю легче сравнивать небольшие различия.

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

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

Использование встроенной палитры Matplotlib

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

Теперь давайте отредактируем изображение и протестируем 4 различных встроенных цветовых карты Matplotlib.

Создание собственной палитры

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

Преобразование между разными цветовыми форматами

Если у вас есть определенный набор цветов для использования на основе бренда или темы веб-сайта, скорее всего, они будут в формате HEX. Итак, сначала давайте определим некоторые функции для преобразования HEX в RGB и RGB в Decimal (значение от 0 до 1 для каждого из каналов RBG).

Мои цвета HEX показаны ниже вместе с их эквивалентами RGB (код, который я использовал для создания этого изображения, находится здесь).

Создание непрерывной палитры

Давайте создадим непрерывную цветовую карту, содержащую все вышеперечисленные цвета. Мы будем использовать функцию matplotlib.colors под названием LinearSegmentedColormap. Эта функция принимает словарь с записями красного, зеленого и синего цветов. Каждая запись должна быть списком кортежей x, y0, y1, образующих строки в таблице. Итак, если вы хотите, чтобы красный увеличился с 0 до 1 в нижней половине, зеленый - чтобы сделать то же самое в средней половине, а синий - в верхней половине. Тогда вы должны использовать:

cdict = {'red':   [(0.0,  0.0, 0.0),
                   (0.5,  1.0, 1.0),
                   (1.0,  1.0, 1.0)],

         'green': [(0.0,  0.0, 0.0),
                   (0.25, 0.0, 0.0),
                   (0.75, 1.0, 1.0),
                   (1.0,  1.0, 1.0)],

         'blue':  [(0.0,  0.0, 0.0),
                   (0.5,  0.0, 0.0),
                   (1.0,  1.0, 1.0)]}

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

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

Создание расходящейся цветовой карты

Мы также можем использовать этот код для создания расходящейся цветовой карты, что полезно, если наши данные должны отображаться около некоторой средней точки, например нуля. Если данные не одинаково центрированы относительно средней точки, например, если он находится в диапазоне от -2 до 5, нам нужно сместить центр цветовой карты в среднюю точку наших данных. В приведенном ниже коде показано, как это сделать с помощью TwoSlopeNorm для создания нормы, которая затем используется в imshow для масштабирования данных до диапазона [0, 1] перед сопоставлением с цветами.

Выбор правильных цветов для вашей палитры

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

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

  • Coolors
    Coolors - фантастическое приложение с множеством функций. Для создания непрерывной шкалы цветов я предпочитаю их службу генерации цветовых градиентов, в которой есть тонны красивых цветовых палитр, которые хорошо переходят в непрерывные шкалы и могут быть настроены в соответствии с вашими потребностями.
  • Цветность Грегора Айша
    Цветность полезна для оптимизации ваших цветовых палитр. Это может быть немного ошибочно, но оно помогает вам взять два или более цветов и создать полную шкалу промежуточных значений. Он также поможет вам узнать, безопасна ли ваша шкала для дальтоников.
  • Цветовые палитры W3schools
    Здесь есть несколько хороших примеров цветовых палитр. W3 также предоставляет другие бесплатные услуги для выбора палитр на основе теории цвета, преобразования между различными цветовыми форматами (например, Hex, RGB и т. Д.) И множества других полезных инструментов.
  • Генератор цветовой шкалы Хайка Ана
    Я наткнулся на этот генератор цветовой шкалы во время своего последнего проекта. Это отличный ресурс, где вы можете создавать случайные, визуально приятные цветовые шкалы, а затем настраивать их свойства, в том числе добавлять более широкий диапазон цветов и настраивать такие параметры, как насыщенность и яркость.

Загляните на мой GitHub, чтобы найти код для этого руководства.