Визуализация данных – ключевой этап в анализе, и Matplotlib предоставляет широкие возможности для создания информативных графиков. Одним из мощных инструментов является диаграмма рассеяния (scatter plot), позволяющая исследовать взаимосвязи между двумя или более переменными. Цветовая кодировка точек на диаграмме рассеяния значительно улучшает восприятие данных, позволяя выделить группы, тренды и выбросы. В этой статье мы подробно рассмотрим различные методы цветовой кодировки в Matplotlib, от простых до продвинутых, с практическими примерами.
Основы цветовой кодировки в Matplotlib Scatter Plot
Что такое диаграмма рассеяния и зачем нужна цветовая кодировка?
Диаграмма рассеяния отображает значения двух переменных в виде точек на координатной плоскости. Использование цветовой кодировки позволяет добавить дополнительное измерение данных, отображая значения третьей переменной (или категории) с помощью различных цветов. Это делает график более информативным и позволяет выявлять закономерности, которые не видны при использовании только двух переменных.
Базовый синтаксис plt.scatter() и параметр c
Основная функция для создания диаграмм рассеяния в Matplotlib – plt.scatter(). Ключевым параметром для управления цветом является c. Он может принимать различные типы данных:
-
Строка: Указывает один цвет для всех точек (например,
c='red',c='green'). -
Массив чисел: Задает значения для цветовой карты (см. далее).
-
Массив строк: Задает цвета для каждой точки.
Пример базового использования:
import matplotlib.pyplot as plt
import numpy as np
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
colors = np.random.rand(n)
plt.scatter(x, y, c=colors)
plt.show()
В этом примере, colors – это массив случайных чисел, которые будут использованы для отображения точек с использованием цветовой карты по умолчанию.
Цветовая кодировка на основе категориальных данных
Присваивание цветов точкам на основе категорий
Часто требуется раскрасить точки в зависимости от их принадлежности к определенной категории. Для этого можно создать массив, содержащий цвета для каждой точки, основываясь на значениях категориальной переменной. Можно использовать словарь для сопоставления категорий и цветов.
import matplotlib.pyplot as plt
import numpy as np
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
categories = np.random.choice(['A', 'B', 'C'], n)
color_map = {'A': 'red', 'B': 'green', 'C': 'blue'}
colors = [color_map[category] for category in categories]
plt.scatter(x, y, c=colors)
plt.show()
Использование условных операторов для динамического изменения цвета
Более сложная логика выбора цвета может быть реализована с использованием условных операторов. Например, можно раскрасить точки в зависимости от их положения относительно определенной границы.
import matplotlib.pyplot as plt
import numpy as np
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
colors = ['red' if x[i] > y[i] else 'blue' for i in range(n)]
plt.scatter(x, y, c=colors)
plt.show()
Цветовая кодировка с использованием числовых данных и цветовых карт
Применение цветовых карт (cmap) для отображения числовых значений
Для отображения числовых значений используется цветовая карта (cmap). Matplotlib предоставляет множество встроенных цветовых карт (например, 'viridis', 'magma', 'coolwarm'). При использовании cmap значения, передаваемые в параметре c, автоматически масштабируются и отображаются в соответствующий цвет.
import matplotlib.pyplot as plt
import numpy as np
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
z = np.random.rand(n)
plt.scatter(x, y, c=z, cmap='viridis')
plt.show()
Нормализация данных для оптимального отображения цветов
Иногда значения данных могут находиться в диапазоне, который не оптимален для цветовой карты. В таких случаях необходимо нормализовать данные, чтобы они находились в диапазоне от 0 до 1. Это можно сделать с помощью matplotlib.colors.Normalize.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors as mcolors
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
z = np.random.rand(n) * 100 # значения от 0 до 100
norm = mcolors.Normalize(vmin=0, vmax=100)
plt.scatter(x, y, c=z, cmap='viridis', norm=norm)
plt.show()
Настройка и улучшение визуализации цветовой кодировки
Добавление цветовой шкалы (colorbar) и ее настройка
Для понимания соответствия между цветом и значением необходимо добавить цветовую шкалу (colorbar). Это делается с помощью функции plt.colorbar().
import matplotlib.pyplot as plt
import numpy as np
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
z = np.random.rand(n)
plt.scatter(x, y, c=z, cmap='viridis')
plt.colorbar()
plt.show()
Можно настроить цветовую шкалу, добавив заголовок или изменив ориентацию.
Настройка легенды и маркеров для улучшения читаемости
Для категориальных данных рекомендуется использовать легенду, чтобы обозначить соответствие между цветом и категорией. Также можно настроить размер и форму маркеров для улучшения читаемости графика. Например:
import matplotlib.pyplot as plt
import numpy as np
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
categories = np.random.choice(['A', 'B', 'C'], n)
color_map = {'A': 'red', 'B': 'green', 'C': 'blue'}
marker_map = {'A': 'o', 'B': '^', 'C': 's'}
for category in ['A', 'B', 'C']:
indices = categories == category
plt.scatter(x[indices], y[indices], c=color_map[category], marker=marker_map[category], label=category)
plt.legend()
plt.show()
Заключение
Цветовая кодировка точек на диаграмме рассеяния Matplotlib – мощный инструмент визуализации данных. Используя различные методы, описанные в этой статье, вы сможете создавать информативные и понятные графики, которые помогут вам анализировать и представлять данные эффективно. Помните о важности выбора подходящей цветовой карты, нормализации данных и настройки легенды для обеспечения максимальной читаемости и понимания ваших визуализаций.