Что такое alpha и зачем она нужна?
Параметр alpha в Matplotlib контролирует уровень прозрачности графических элементов, таких как точки, линии или заливки. Значение alpha лежит в диапазоне от 0.0 (полностью прозрачный) до 1.0 (полностью непрозрачный). Использование прозрачности является мощным инструментом визуализации, особенно при работе с большим объемом данных или при наложении нескольких элементов на одном графике.
Прозрачность помогает управлять видимостью перекрывающихся элементов, выделять определенные области или паттерны, а также улучшать общее восприятие плотности данных без избыточного «замусоривания» графика.
Базовые способы установки прозрачности для графиков
Наиболее простой способ использования alpha – это установка единого значения для всех элементов определенного типа на графике. Например, при рисовании гистограммы можно задать прозрачность для всех столбцов, или при построении графика рассеяния – для всех точек. Это достигается путем передачи скалярного значения параметру alpha в соответствующей функции построения.
Установка прозрачности для всех точек сразу
Использование параметра alpha в функциях построения графиков (scatter, plot и др.)
Многие функции построения графиков в Matplotlib, такие как plot, scatter, bar, hist и другие, имеют параметр alpha. Если этому параметру передать скалярное значение, оно будет применено ко всем создаваемым элементам.
Для графика рассеяния (scatter), который часто используется для отображения отдельных точек, установка общего alpha выглядит так:
import matplotlib.pyplot as plt
import numpy as np
# Генерация случайных данных
np.random.seed(42)
x: np.ndarray = np.random.rand(100)
y: np.ndarray = np.random.rand(100)
# Построение графика рассеяния с общим значением alpha
plt.figure(figsize=(8, 6))
plt.scatter(x, y, alpha=0.5, color='blue', label='Данные') # alpha = 0.5 для всех точек
plt.title('График рассеяния с общей прозрачностью точек')
plt.xlabel('Ось X')
plt.ylabel('Ось Y')
plt.grid(True)
plt.legend()
plt.show()
В этом примере все 100 точек будут нарисованы с 50% непрозрачностью.
Примеры кода с общим значением alpha для всех точек
Использование общего alpha полезно, когда вы хотите уменьшить интенсивность точек, чтобы лучше видеть их распределение, или когда на одном графике отображается несколько наборов данных, и вы хотите сделать нижние наборы частично видимыми через верхние.
import matplotlib.pyplot as plt
import numpy as np
# Генерация двух наборов данных
np.random.seed(10)
x1: np.ndarray = np.random.randn(100)
y1: np.random.randn(100)
x2: np.ndarray = np.random.randn(100) + 1.5
y2: np.random.randn(100) + 1.5
# Построение двух наборов точек с разной прозрачностью
plt.figure(figsize=(8, 6))
plt.scatter(x1, y1, alpha=0.7, color='red', label='Набор 1')
plt.scatter(x2, y2, alpha=0.4, color='green', label='Набор 2')
plt.title('Наложение наборов данных с разной прозрачностью')
plt.xlabel('Ось X')
plt.ylabel('Ось Y')
plt.grid(True)
plt.legend()
plt.show()
Этот пример демонстрирует, как два перекрывающихся набора точек становятся более различимыми благодаря установке разных уровней прозрачности для каждого набора.
Установка прозрачности для каждой точки индивидуально
Использование массива значений alpha для каждой точки
Гораздо более гибкий подход заключается в установке индивидуального значения alpha для каждой точки на графике. Это достигается путем передачи массиву или списку значений параметру alpha. Длина этого массива должна точно соответствовать количеству точек, которые вы отрисовываете. Каждое значение в массиве будет применено к соответствующей точке.
import matplotlib.pyplot as plt
import numpy as np
# Генерация данных для точек
n_points: int = 150
x: np.ndarray = np.random.rand(n_points)
y: np.ndarray = np.random.rand(n_points)
# Генерация случайных значений прозрачности для каждой точки
# Значения alpha должны быть в диапазоне [0, 1]
individual_alpha: np.ndarray = np.random.rand(n_points) # Массив случайных alpha
# Построение графика рассеяния с индивидуальной прозрачностью
plt.figure(figsize=(8, 6))
plt.scatter(x, y, alpha=individual_alpha, color='purple', label='Точки с разной прозрачностью') # Передача массива alpha
plt.title('График рассеяния с индивидуальной прозрачностью точек')
plt.xlabel('Ось X')
plt.ylabel('Ось Y')
plt.grid(True)
plt.legend()
plt.show()
В этом коде каждая из 150 точек получает уникальное значение прозрачности, определенное случайным образом.
Привязка значений alpha к другим данным (например, третьему измерению)
Индивидуальная прозрачность становится особенно полезной, когда вы привязываете значение alpha точки к какой-либо характеристике самой точки или к дополнительному, «третьему» измерению данных. Это позволяет визуализировать дополнительную информацию прямо на 2D графике рассеяния.
Например, прозрачность точки может отражать:
- Плотность данных в этой области.
- Значение некоторой метрики (например, CTR для точки на графике пользовательского поведения).
- Уровень уверенности или дисперсии, связанный с данной точкой.
- Время или порядок появления точки (для анимации или статического отображения истории).
Для этого необходимо масштабировать или нормализовать значения «третьего измерения» так, чтобы они лежали в диапазоне от 0.0 до 1.0.
«`python
import matplotlib.pyplot as plt
import numpy as np
Генерация данных
npoints: int = 200
x: np.ndarray = np.random.randn(npoints)
y: np.random.randn(n_points)