Как создать и применить пользовательскую цветовую схему в Matplotlib из шестнадцатеричных (HEX) кодов?

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

Основы работы с цветами в Matplotlib

Matplotlib предлагает несколько способов задания цветов, включая предопределенные имена, RGB и HEX-коды. Понимание основ работы с цветами необходимо для создания эффективных и привлекательных графиков.

Обзор цветовых моделей, используемых в Matplotlib (RGB, HEX)

  • RGB (Red, Green, Blue): Цвета определяются интенсивностью красного, зеленого и синего компонентов. Значения варьируются от 0 до 1 (или от 0 до 255). Пример: (0.2, 0.4, 0.6).

  • HEX (Шестнадцатеричный): Цвета задаются шестнадцатеричным кодом, представляющим RGB значения. Пример: #2E8B57.

Импорт и использование стандартных цветовых схем Matplotlib

Matplotlib включает в себя набор встроенных цветовых схем, которые можно использовать для различных типов графиков. Для импорта и применения цветовых схем используется модуль matplotlib.cm. Например:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np

# Пример использования цветовой схемы 'viridis'
x = np.linspace(0, 10, 100)
y = np.sin(x)
colors = cm.viridis(np.linspace(0, 1, 100))

plt.scatter(x, y, c=colors)
plt.show()

Создание пользовательской цветовой схемы на основе HEX-кодов

Создание своей цветовой схемы позволяет полностью контролировать внешний вид ваших графиков.

Создание списка HEX-кодов для пользовательской палитры

Сначала необходимо определить список HEX-кодов, которые будут использоваться в палитре. Существует множество онлайн-инструментов для создания цветовых палитр, таких как Coolors или Adobe Color.

hex_colors = ['#264653', '#2A9D8F', '#E9C46A', '#F4A261', '#E76F51']

Преобразование HEX-кодов в RGB формат для Matplotlib

Matplotlib работает с цветами в формате RGB (значения от 0 до 1). Необходимо преобразовать HEX-коды в RGB.

import matplotlib.colors

def hex_to_rgb(hex_color):
    hex_color = hex_color.lstrip('#')
    return tuple(int(hex_color[i:i+2], 16) / 255 for i in (0, 2, 4))

rgb_colors = [matplotlib.colors.to_rgb(color) for color in hex_colors]

print(rgb_colors)

Применение пользовательской цветовой схемы к графикам

Использование HEX-кодов для задания цветов отдельным элементам графика (линии, точки, столбцы)

Можно напрямую использовать HEX-коды для задания цветов отдельным элементам графика. Это наиболее простой способ применения пользовательских цветов.

Реклама
import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [4, 5, 6], color='#264653', label='Линия 1')
plt.scatter([1, 2, 3], [6, 5, 4], color='#E76F51', label='Точки 1')
plt.bar([1, 2, 3], [2, 4, 6], color='#2A9D8F', label='Столбцы 1')
plt.legend()
plt.show()

Создание и применение пользовательской цветовой карты (colormap) из HEX-кодов

Для создания градиентной цветовой схемы можно использовать matplotlib.colors.LinearSegmentedColormap.

import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np

hex_colors = ['#003f5c', '#2f4b7c', '#665191', '#a05195', '#d45087', '#f95d6a', '#ff7c43', '#ffa600']

# Преобразование HEX в RGB
rgb_colors = [matplotlib.colors.to_rgb(color) for color in hex_colors]

# Создание пользовательской цветовой карты
cmap_name = 'my_custom_colormap'
my_cmap = matplotlib.colors.LinearSegmentedColormap.from_list(cmap_name, rgb_colors, N=256)

# Пример использования
x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.scatter(x, y, c=y, cmap=my_cmap)
plt.colorbar(label='Значение Y')
plt.show()

Продвинутые методы и лучшие практики

Использование matplotlib.colors.ListedColormap для создания дискретных цветовых карт

Если вам нужна дискретная цветовая карта (например, для категориальных данных), используйте matplotlib.colors.ListedColormap.

import matplotlib.pyplot as plt
import matplotlib.colors

hex_colors = ['#8dd3c7','#ffffb3','#bebada','#fb8072','#80b1d3','#fdb462','#b3de69','#fccde5','#d9d9d9','#bc80bd']
rgb_colors = [matplotlib.colors.to_rgb(color) for color in hex_colors]


cmap_name = 'my_list_colormap'
my_cmap = matplotlib.colors.ListedColormap(rgb_colors, name=cmap_name)

# Пример использования
categories = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
values = range(len(categories))

plt.bar(categories, values, color=my_cmap(values))
plt.show()

Советы по выбору цветов для обеспечения доступности и читаемости графиков

  • Контраст: Убедитесь, что цвета имеют достаточный контраст, особенно между текстом и фоном.

  • Цветовая слепота: Учитывайте, что часть аудитории может иметь проблемы с цветовым восприятием. Используйте инструменты для проверки цветовой слепоты.

  • Согласованность: Используйте одинаковые цвета для обозначения одних и тех же категорий на разных графиках.

  • Ограниченное количество цветов: Не перегружайте график слишком большим количеством цветов. Ограничьтесь 5-7 цветами.

  • Использование онлайн инструментов: Используйте палитры, которые генерируются в соответствии с best practices (например, на сайте colorbrewer2.org).

Заключение

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


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