Что такое цветовая шкала (colorbar) и зачем она нужна?
Цветовая шкала (colorbar) в Matplotlib – это визуальный элемент, который отображает соответствие между цветами на графике и значениями данных. Она служит легендой, позволяя интерпретировать, какие значения данных соответствуют определенным цветам. Без цветовой шкалы, понимание распределения данных, закодированных цветом, становится крайне затруднительным. Она особенно полезна при работе с точечными диаграммами, где цвет точек представляет собой дополнительное измерение данных.
Основы создания точечной диаграммы (scatter plot) в Matplotlib
Точечная диаграмма (scatter plot) – это тип графика, отображающий взаимосвязь между двумя или более переменными с помощью точек. Каждая точка на диаграмме соответствует определенному набору значений переменных. Matplotlib предоставляет функцию scatter() для создания таких диаграмм. Ключевыми параметрами являются координаты x и y для каждой точки, а также возможность задавать размер, цвет и форму точек.
Необходимость цветовой шкалы для визуализации данных в точечной диаграмме
Когда цвет точек на точечной диаграмме кодирует значение некоторой третьей переменной, цветовая шкала становится незаменимой. Она позволяет зрителю быстро понять, какие значения переменной соответствуют каким цветам, и таким образом, интерпретировать распределение данных. Без цветовой шкалы, цвет точек был бы просто декоративным элементом, не несущим никакой информативной нагрузки.
Добавление базовой цветовой шкалы к точечной диаграмме
Использование функции scatter() для создания точечной диаграммы
Функция scatter() является ключевым инструментом для создания точечных диаграмм в Matplotlib. Она принимает массивы координат x и y в качестве основных аргументов.
Указание цветовой карты (colormap) с помощью аргумента c
Аргумент c функции scatter() определяет цвет точек. Он может быть задан как одно значение (один цвет для всех точек), либо как массив значений, соответствующих каждой точке. Если c является массивом числовых значений, Matplotlib автоматически отображает эти значения на выбранную цветовую карту.
Добавление цветовой шкалы с помощью функции plt.colorbar()
После создания точечной диаграммы с использованием аргумента c, добавление цветовой шкалы осуществляется простой функцией plt.colorbar(). Эта функция автоматически обнаруживает отображение цветов и создает соответствующую шкалу.
Пример простого кода с цветовой шкалой
import matplotlib.pyplot as plt
import numpy as np
# Сгенерируем случайные данные
n_points: int = 100
x: np.ndarray = np.random.rand(n_points)
y: np.ndarray = np.random.rand(n_points)
z: np.ndarray = np.random.rand(n_points)
# Создаем точечную диаграмму с цветовой кодировкой
scatter = plt.scatter(x, y, c=z, cmap='viridis')
# Добавляем цветовую шкалу
cbar = plt.colorbar(scatter)
# Задаем заголовок для графика
plt.title('Точечная диаграмма с цветовой шкалой')
# Добавляем подписи к осям
plt.xlabel('Ось X')
plt.ylabel('Ось Y')
# Отображаем график
plt.show()
Настройка внешнего вида цветовой шкалы
Изменение заголовка (label) цветовой шкалы
Заголовок (label) цветовой шкалы можно изменить с помощью метода set_label() объекта, возвращаемого функцией plt.colorbar(). Это позволяет уточнить, что именно отображает цветовая шкала.
cbar = plt.colorbar(scatter)
cbar.set_label('Значение переменной Z')
Настройка тиков (ticks) и формата меток (ticklabels)
Тики и метки тиков на цветовой шкале можно настраивать, используя методы set_ticks() и set_ticklabels() объекта цветовой шкалы. Это позволяет управлять отображаемым диапазоном значений и форматом меток (например, число десятичных знаков).
cbar = plt.colorbar(scatter)
ticks: np.ndarray = np.linspace(0, 1, 5) # Пример: 5 тиков от 0 до 1
cbar.set_ticks(ticks)
cbar.set_ticklabels(['{:.2f}'.format(tick) for tick in ticks]) # Формат меток: два знака после запятой
Изменение ориентации цветовой шкалы (горизонтальная/вертикальная)
Ориентацию цветовой шкалы можно изменить, указав аргумент orientation при вызове функции plt.colorbar(). Доступные значения: 'vertical' (по умолчанию) и 'horizontal'.
plt.colorbar(scatter, orientation='horizontal')
Изменение размера и положения цветовой шкалы
Размер и положение цветовой шкалы контролируются через аргумент ax функции plt.colorbar(). Ему можно передать объект Axes, в котором будет размещена цветовая шкала. Положение и размер этого Axes можно настроить, как и любой другой элемент графика.
import matplotlib.gridspec as gridspec
fig = plt.figure(figsize=(8, 4))
gs = gridspec.GridSpec(1, 2, width_ratios=[4, 1]) # Соотношение ширины графика и шкалы
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])
scatter = ax1.scatter(x, y, c=z, cmap='viridis')
plt.colorbar(scatter, cax=ax2)
plt.show()
Использование различных цветовых карт (colormaps)
Обзор доступных цветовых карт в Matplotlib (например, ‘viridis’, ‘magma’, ‘coolwarm’)
Matplotlib предоставляет широкий выбор встроенных цветовых карт. Некоторые популярные примеры: 'viridis' (хорошо воспринимается людьми с дальтонизмом), 'magma' (подходит для отображения интенсивности), 'coolwarm' (для отображения отклонений от центрального значения).
Как выбрать подходящую цветовую карту для ваших данных
Выбор цветовой карты зависит от типа данных, которые вы визуализируете, и от того, что вы хотите подчеркнуть. Для последовательных данных (например, температура) часто используют градиентные карты, такие как 'viridis' или 'magma'. Для данных, имеющих центральное значение (например, прибыль/убыток), подходят дивергентные карты, такие как 'coolwarm' или 'RdBu'. Важно также учитывать доступность цветовой карты для людей с дальтонизмом.
Инвертирование цветовой карты (например, cmap='viridis_r')
Чтобы инвертировать цветовую карту, добавьте суффикс _r к её названию. Например, cmap='viridis_r' инвертирует цветовую карту 'viridis'. Это может быть полезно для изменения визуального восприятия данных.
Продвинутые техники работы с цветовыми шкалами
Нормирование данных для цветовой шкалы (Normalization)
Иногда необходимо явно указать диапазон значений, которые будут отображаться на цветовой шкале, особенно если данные имеют выбросы или если вы хотите сравнить несколько графиков с разными диапазонами данных. Для этого используется класс Normalize из модуля matplotlib.colors.
import matplotlib.colors as colors
# Создаем объект Normalize с нужным диапазоном
norm = colors.Normalize(vmin=0.2, vmax=0.8)
# Используем его при создании точечной диаграммы
scatter = plt.scatter(x, y, c=z, cmap='viridis', norm=norm)
Использование ScalarMappable для более гибкого управления цветовой шкалой
Класс ScalarMappable позволяет более гибко управлять отображением данных на цвета. Он особенно полезен, когда необходимо создать цветовую шкалу для данных, которые не отображаются непосредственно на графике.
import matplotlib.cm as cm
# Создаем ScalarMappable
sm = cm.ScalarMappable(cmap='viridis', norm=plt.Normalize(vmin=0, vmax=1))
sm.set_array([]) # Необходимо для работы colorbar
# Добавляем цветовую шкалу
plt.colorbar(sm)
Создание пользовательских цветовых шкал (custom colormaps)
Matplotlib позволяет создавать собственные цветовые шкалы, определяя последовательность цветов. Это дает полный контроль над визуализацией данных.
from matplotlib.colors import LinearSegmentedColormap
# Определяем цвета для новой цветовой карты
colors_list = [(0, 0, 1), (0, 1, 0), (1, 0, 0)] # Синий -> Зеленый -> Красный
# Создаем цветовую карту
cm = LinearSegmentedColormap.from_list('my_colormap', colors_list)
# Используем её при создании точечной диаграммы
scatter = plt.scatter(x, y, c=z, cmap=cm)
plt.colorbar(scatter)