Matplotlib: Как Выбрать Объект или Список Цветов для Цветовой Карты?

Что такое цветовые карты и зачем они нужны?

Цветовые карты (colormap) в Matplotlib преобразуют значения данных в соответствующие цвета. Они критически важны для визуализации данных, особенно когда нужно отобразить плотность, интенсивность или любую другую числовую характеристику в графической форме. Использование цветовых карт значительно упрощает интерпретацию сложных наборов данных, позволяя быстро выявлять закономерности и аномалии. Например, в heatmap, где каждый элемент матрицы представлен цветом, цветовая карта делает очевидными области с высокими и низкими значениями.

Основные типы цветовых карт в Matplotlib (Sequential, Diverging, Qualitative)

Matplotlib предлагает три основных типа цветовых карт:

  1. Sequential (Последовательные): Изменяются монотонно от одного конца диапазона к другому, обычно используются для представления упорядоченных данных (например, от низких значений к высоким).
  2. Diverging (Расходящиеся): Имеют два разных цветовых диапазона, расходящихся от центрального значения (часто 0), полезны для выделения положительных и отрицательных отклонений.
  3. Qualitative (Качественные): Содержат набор дискретных цветов, хорошо подходят для представления категориальных данных, где важна различимость между категориями, а не их порядок.

Стандартные цветовые карты Matplotlib: примеры и визуализация

Matplotlib включает множество встроенных цветовых карт, таких как viridis, plasma, magma, cividis, coolwarm, RdBu и другие. Каждая из них имеет свои визуальные характеристики и подходит для разных типов данных. Например, viridis — перцептивно равномерная цветовая карта, что означает, что изменения в цвете соответствуют равным изменениям в данных, что делает ее хорошим выбором по умолчанию. coolwarm и RdBu отлично подходят для расходящихся данных, выделяя положительные и отрицательные значения.

Выбор готовой цветовой карты: объект Colormap

Использование plt.get_cmap() для получения объекта цветовой карты

Функция plt.get_cmap(name) возвращает объект Colormap с заданным именем. Этот объект можно использовать для преобразования числовых значений в цвета. Если имя не указано, возвращается текущая цветовая карта по умолчанию.

import matplotlib.pyplot as plt
import numpy as np

# Получение цветовой карты 'viridis'
cmap = plt.get_cmap('viridis')

# Пример использования: преобразование значения 0.5 в цвет
color = cmap(0.5)
print(f"Цвет для значения 0.5 в 'viridis': {color}")

#Визуализация примера
data = np.random.rand(10, 10)
plt.imshow(data, cmap=cmap)
plt.colorbar()
plt.title("Визуализация с использованием viridis")
plt.show()

Примеры: применение различных готовых цветовых карт (viridis, plasma, magma, cividis и др.)

import matplotlib.pyplot as plt
import numpy as np

def visualize_colormap(cmap_name: str) -> None:
    """Визуализирует пример использования указанной цветовой карты."""
    cmap = plt.get_cmap(cmap_name)
    data = np.random.rand(10, 10)
    plt.imshow(data, cmap=cmap)
    plt.colorbar()
    plt.title(f"Визуализация с использованием {cmap_name}")
    plt.show()

# Примеры использования
visualize_colormap('viridis')
visualize_colormap('plasma')
visualize_colormap('magma')
visualize_colormap('cividis')

Как узнать доступные названия цветовых карт

Чтобы получить список всех доступных цветовых карт в Matplotlib, можно использовать атрибут cm.cmap_d (словарь цветовых карт).

import matplotlib.pyplot as plt
import matplotlib.cm as cm

# Вывод списка названий цветовых карт
print(list(cm.cmap_d.keys()))

Инвертирование цветовых карт: суффикс _r

Чтобы инвертировать цветовую карту (например, изменить направление градиента от светлого к темному на темное к светлому), добавьте суффикс _r к ее названию. Например, viridis становится viridis_r.

import matplotlib.pyplot as plt
import numpy as np

# Использование инвертированной цветовой карты 'viridis_r'
cmap = plt.get_cmap('viridis_r')

# Визуализация примера
data = np.random.rand(10, 10)
plt.imshow(data, cmap=cmap)
plt.colorbar()
plt.title("Визуализация с использованием viridis_r")
plt.show()

Создание пользовательских цветовых карт: список цветов

Определение списка цветов в формате RGB или RGBA

Пользовательские цветовые карты можно создавать, определяя список цветов в формате RGB (красный, зеленый, синий) или RGBA (красный, зеленый, синий, альфа-канал). Значения должны быть в диапазоне от 0 до 1.

Использование LinearSegmentedColormap.from_list() для создания цветовой карты из списка

Функция LinearSegmentedColormap.from_list(name, colors) создает цветовую карту на основе предоставленного списка цветов. name — имя новой цветовой карты, colors — список цветов.

Примеры: создание градиентных цветовых карт из двух или более цветов

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

def create_custom_colormap(name: str, colors: list[tuple[float, float, float]]) -> LinearSegmentedColormap:
    """Создает пользовательскую цветовую карту на основе списка цветов."""
    return LinearSegmentedColormap.from_list(name, colors)

# Создание градиентной цветовой карты из двух цветов (красный и синий)
colors = [(1, 0, 0), (0, 0, 1)]  # RGB: красный -> синий
custom_cmap = create_custom_colormap("RedBlue", colors)

# Визуализация примера
data = np.random.rand(10, 10)
plt.imshow(data, cmap=custom_cmap)
plt.colorbar()
plt.title("Визуализация с использованием пользовательской цветовой карты RedBlue")
plt.show()

#Создание градиентной цветовой карты из трех цветов
colors = [(0, 0, 0), (0.5, 0.5, 0.5), (1, 1, 1)] # RGB: черный -> серый -> белый
custom_cmap2 = create_custom_colormap("BlackWhite", colors)

# Визуализация примера
data = np.random.rand(10, 10)
plt.imshow(data, cmap=custom_cmap2)
plt.colorbar()
plt.title("Визуализация с использованием пользовательской цветовой карты BlackWhite")
plt.show()
Реклама

Сохранение и повторное использование пользовательских цветовых карт

После создания пользовательской цветовой карты, её можно сохранить в словаре cm.register_cmap() и использовать по имени. Чтобы использовать созданную карту повторно, достаточно вызвать её по имени.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.cm as cm

def create_and_register_colormap(name: str, colors: list[tuple[float, float, float]]) -> None:
    """Создает, регистрирует и визуализирует пользовательскую цветовую карту."""
    custom_cmap = LinearSegmentedColormap.from_list(name, colors)
    cm.register_cmap(name, custom_cmap)

# Создание и регистрация цветовой карты
colors = [(0, 1, 0), (1, 0, 1)]  # RGB: зеленый -> фиолетовый
create_and_register_colormap("GreenPurple", colors)

# Использование зарегистрированной цветовой карты
data = np.random.rand(10, 10)
plt.imshow(data, cmap="GreenPurple")
plt.colorbar()
plt.title("Визуализация с использованием зарегистрированной цветовой карты GreenPurple")
plt.show()

Применение цветовых карт к данным

Использование imshow() и других функций для визуализации с цветовыми картами

Функция imshow() наиболее часто используется для визуализации двумерных данных (например, матриц) с применением цветовых карт. Другие функции, такие как scatter() (для графиков рассеяния) и contourf() (для контурных графиков), также позволяют использовать цветовые карты.

Настройка диапазона значений, отображаемых на цветовой карте (vmin, vmax)

Параметры vmin и vmax позволяют задать минимальное и максимальное значения, отображаемые на цветовой карте. Значения вне этого диапазона будут обрезаны или отображены крайними цветами цветовой карты.

import matplotlib.pyplot as plt
import numpy as np

# Создание данных
data = np.random.rand(10, 10) * 100

# Визуализация с настройкой vmin и vmax
plt.imshow(data, cmap='viridis', vmin=20, vmax=80)
plt.colorbar()
plt.title("Визуализация с настройкой vmin и vmax")
plt.show()

Добавление цветовой шкалы (colorbar) для интерпретации цветов

Функция colorbar() добавляет цветовую шкалу к графику, показывающую соответствие между цветами и значениями данных. Она позволяет легко интерпретировать значения, представленные цветами.

Примеры: визуализация матриц, графиков рассеяния и контурных графиков

import matplotlib.pyplot as plt
import numpy as np

# Визуализация матрицы
data = np.random.rand(10, 10)
plt.imshow(data, cmap='viridis')
plt.colorbar()
plt.title("Визуализация матрицы")
plt.show()

# Визуализация графика рассеяния
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
plt.scatter(x, y, c=z, cmap='plasma')
plt.colorbar()
plt.title("Визуализация графика рассеяния")
plt.show()

# Визуализация контурного графика
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
plt.contourf(X, Y, Z, cmap='coolwarm')
plt.colorbar()
plt.title("Визуализация контурного графика")
plt.show()

Продвинутые техники работы с цветовыми картами

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

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

Комбинирование нескольких цветовых карт

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

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

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

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

# Задание списка цветов для категорий
colors = ['red', 'green', 'blue']

# Создание дискретной цветовой карты
cmap = ListedColormap(colors)

# Создание категориальных данных
data = np.random.randint(0, 3, size=(10, 10))

# Визуализация с использованием дискретной цветовой карты
plt.imshow(data, cmap=cmap)
plt.colorbar(ticks=[0, 1, 2])  # Установка меток для категорий
plt.title("Визуализация с использованием дискретной цветовой карты")
plt.show()

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