Что такое точечная диаграмма (Scatter plot) и зачем менять цвет точек?
Точечная диаграмма (scatter plot) — это тип графика, который использует точки для представления значений двух различных переменных. Положение каждой точки на графике соответствует значениям этих переменных для конкретного элемента данных. Изменение цвета точек в зависимости от их значений позволяет добавить третье измерение к визуализации, делая ее более информативной и наглядной. Например, можно отображать зависимость между двумя метриками контекстной рекламы, а цвет точек будет указывать на стоимость клика (CPC).
Краткий обзор библиотеки Matplotlib
Matplotlib — это мощная библиотека Python для создания статических, анимированных и интерактивных визуализаций. Она предоставляет широкие возможности для настройки графиков, включая изменение цветов, маркеров, шрифтов и других элементов. Matplotlib является основой для многих других библиотек визуализации данных в Python, таких как Seaborn и Pandas.
Постановка задачи: изменение цвета в зависимости от значения
Основная задача — научиться изменять цвет каждой точки на точечной диаграмме в Matplotlib в зависимости от значения связанной с ней переменной. Это позволит визуально отображать дополнительную информацию на графике, делая его более понятным и полезным для анализа данных.
Базовый пример: создание точечной диаграммы и изменение цвета
Создание простой точечной диаграммы с фиксированным цветом
Сначала создадим простую точечную диаграмму, где все точки имеют один и тот же цвет. Это позволит увидеть базовую структуру графика и понять, как добавлять цвет.
import matplotlib.pyplot as plt
import numpy as np
from typing import List, Tuple
def create_scatter_plot(x: List[float], y: List[float], color: str = 'blue') -> None:
"""Создает точечную диаграмму с заданными координатами и цветом.
Args:
x: Список координат x.
y: Список координат y.
color: Цвет точек (по умолчанию 'blue').
"""
plt.scatter(x, y, c=color)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Простая точечная диаграмма')
plt.show()
if __name__ == '__main__':
x_values = np.random.rand(50)
y_values = np.random.rand(50)
create_scatter_plot(x_values, y_values)
Изменение цвета всех точек на основе одного условия
Теперь попробуем изменить цвет всех точек на основе простого условия. Например, можно покрасить точки, у которых координата y больше определенного значения, в другой цвет.
import matplotlib.pyplot as plt
import numpy as np
from typing import List
def color_by_condition(x: List[float], y: List[float], threshold: float) -> List[str]:
"""Определяет цвет каждой точки в зависимости от условия.
Args:
x: Список координат x.
y: Список координат y.
threshold: Пороговое значение для координаты y.
Returns:
Список цветов для каждой точки.
"""
colors = ['red' if val > threshold else 'blue' for val in y]
return colors
def create_scatter_plot_with_conditional_color(x: List[float], y: List[float], colors: List[str]) -> None:
"""Создает точечную диаграмму с цветами, заданными условием.
Args:
x: Список координат x.
y: Список координат y.
colors: Список цветов для каждой точки.
"""
plt.scatter(x, y, c=colors)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Точечная диаграмма с условным цветом')
plt.show()
if __name__ == '__main__':
x_values = np.random.rand(50)
y_values = np.random.rand(50)
threshold_value = 0.5
point_colors = color_by_condition(x_values, y_values, threshold_value)
create_scatter_plot_with_conditional_color(x_values, y_values, point_colors)
Использование параметра c для задания цвета
Параметр c в функции plt.scatter() принимает список цветов, который определяет цвет каждой точки. Цвет может быть задан в различных форматах: названиями цветов (например, ‘red’, ‘green’, ‘blue’), шестнадцатеричными кодами (например, ‘#FF0000’), или RGB-значениями (например, (1, 0, 0)).
Изменение цвета точек в зависимости от значения: углубленное изучение
Использование цветовой карты (cmap) для отображения значений
Цветовая карта (cmap) — это способ сопоставления чисел с цветами. Matplotlib предоставляет множество встроенных цветовых карт, таких как ‘viridis’, ‘magma’, ‘jet’ и другие. Для использования цветовой карты необходимо передать значения, которые нужно отобразить цветом, в параметр c и указать нужную цветовую карту в параметре cmap.
import matplotlib.pyplot as plt
import numpy as np
from typing import List
def create_scatter_plot_with_cmap(x: List[float], y: List[float], z: List[float], cmap_name: str = 'viridis') -> None:
"""Создает точечную диаграмму с цветовой картой.
Args:
x: Список координат x.
y: Список координат y.
z: Список значений для отображения цветом.
cmap_name: Название цветовой карты (по умолчанию 'viridis').
"""
plt.scatter(x, y, c=z, cmap=cmap_name)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Точечная диаграмма с цветовой картой')
plt.colorbar(label='Значение Z')
plt.show()
if __name__ == '__main__':
x_values = np.random.rand(50)
y_values = np.random.rand(50)
z_values = np.random.rand(50)
create_scatter_plot_with_cmap(x_values, y_values, z_values)
Нормализация данных для улучшения визуализации (norm)
Иногда значения, которые необходимо отобразить цветом, находятся в диапазоне, который не очень хорошо подходит для цветовой карты. В этом случае можно нормализовать данные, чтобы они находились в диапазоне от 0 до 1. Для этого можно использовать класс matplotlib.colors.Normalize.
Примеры с различными цветовыми картами (viridis, magma, jet и др.)
Разные цветовые карты могут по-разному отображать одни и те же данные. Например, цветовая карта ‘viridis’ является более дружелюбной к восприятию цветов людьми с дальтонизмом, чем ‘jet’. При выборе цветовой карты стоит учитывать особенности ваших данных и целевую аудиторию.
Продвинутые техники изменения цвета
Использование нескольких условий для определения цвета
Можно использовать несколько условий для определения цвета каждой точки. Для этого можно создать функцию, которая принимает значения координат и возвращает цвет в зависимости от комбинации условий.
Создание пользовательской цветовой шкалы
Если стандартные цветовые карты не подходят для вашей задачи, можно создать свою собственную цветовую шкалу, используя класс matplotlib.colors.LinearSegmentedColormap.
Применение цветов на основе категориальных данных
Если данные представлены в виде категорий, можно сопоставить каждой категории определенный цвет и использовать этот цвет для отображения точек на диаграмме.
Использование matplotlib.colors.ListedColormap
matplotlib.colors.ListedColormap позволяет создать цветовую карту на основе списка заданных цветов. Это полезно, когда нужно отобразить небольшое количество дискретных категорий.
Примеры и варианты использования
Визуализация данных о температуре с помощью цветовой шкалы
Можно использовать цветовую шкалу для отображения данных о температуре на карте. Например, можно покрасить регионы с более высокой температурой в красный цвет, а регионы с более низкой температурой — в синий.
Отображение плотности точек на графике
С помощью цветовой шкалы можно отобразить плотность точек на графике. Для этого можно использовать гистограмму плотности (plt.hist2d()) и отобразить ее с помощью цветовой карты.
Подсветка определенных групп данных на диаграмме
Можно использовать разные цвета для подсветки определенных групп данных на диаграмме. Например, можно покрасить точки, соответствующие пользователям, которые совершили покупку, в один цвет, а точки, соответствующие пользователям, которые не совершили покупку, — в другой.