Введение
В этом практическом занятии (лабораторной работе) исследуется, как устанавливать прозрачность цвета (значения альфа) с использованием библиотеки Python Matplotlib. В визуализации данных прозрачность является мощным инструментом, который может выявить закономерности в перекрывающихся элементах или выделить определенные точки данных.
Значения альфа в Matplotlib находятся в диапазоне от 0 до 1:
- 0 означает полную прозрачность (невидимость)
- 1 означает полную непрозрачность (сплошной цвет)
- Значения между 0 и 1 создают различные уровни прозрачности
Мы рассмотрим два основных подхода к установке значений альфа в Matplotlib:
- Использование ключевого аргумента
alpha - Использование формата цвета
(matplotlib_color, alpha)
По завершении этого практического занятия вы сможете создавать визуализации с настраиваемыми параметрами прозрачности, которые улучшат представление ваших данных.
Советы по виртуальной машине (VM)
После завершения запуска виртуальной машины нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Из-за ограничений Jupyter Notebook автоматизация проверки операций невозможна.
Если вы столкнетесь с какими-либо проблемами во время практического занятия, не стесняйтесь обращаться к Labby за помощью. Мы будем благодарны за ваш отзыв после занятия, чтобы помочь нам улучшить опыт проведения практических занятий.
Понимание значений альфа в Matplotlib
На этом первом этапе мы создадим Jupyter Notebook и узнаем, как настроить базовую визуализацию с использованием значений альфа.
Создание первой ячейки Jupyter Notebook
В этой ячейке мы импортируем необходимые библиотеки и создадим два перекрывающихся круга с разными значениями альфа, чтобы продемонстрировать прозрачность.
import matplotlib.pyplot as plt
import numpy as np
## Create a figure and an axes
fig, ax = plt.subplots(figsize=(6, 4))
## Create a circle with alpha=1.0 (completely opaque)
circle1 = plt.Circle((0.5, 0.5), 0.3, color='blue', alpha=1.0, label='Opaque (alpha=1.0)')
## Create a circle with alpha=0.5 (semi-transparent)
circle2 = plt.Circle((0.7, 0.5), 0.3, color='red', alpha=0.5, label='Semi-transparent (alpha=0.5)')
## Add circles to the axes
ax.add_patch(circle1)
ax.add_patch(circle2)
## Set axis limits
ax.set_xlim(0, 1.2)
ax.set_ylim(0, 1)
## Add a title and legend
ax.set_title('Demonstrating Alpha Values in Matplotlib')
ax.legend(loc='upper right')
## Show the plot
plt.show()
После того, как вы введете этот код в ячейку, запустите его, нажав Shift+Enter или нажав кнопку "Run" в панели инструментов.
Понимание результата
Вы должны увидеть два перекрывающихся круга:
- Левый синий круг полностью непрозрачный (альфа = 1.0)
- Правый красный круг полупрозрачный (альфа = 0.5)
Обратите внимание, как вы можете видеть синий круг сквозь красный в месте их пересечения. Это эффект установки значения альфа равным 0.5 для красного круга.
Значения альфа контролируют прозрачность в визуализациях и могут быть полезны в следующих случаях:
- При отображении перекрывающихся точек данных
- При выделении определенных элементов
- При уменьшении визуального шума на плотных графиках
- При создании многослойных визуализаций
Продолжим исследовать больше применений значений альфа на следующем этапе.
Создание столбчатой диаграммы с равномерным значением альфа
На этом этапе мы создадим столбчатую диаграмму, в которой все столбцы имеют одинаковый уровень прозрачности с использованием ключевого аргумента alpha.
Добавление новой ячейки
Добавьте новую ячейку в свой Jupyter Notebook, нажав кнопку "+" в панели инструментов или нажав "Esc", а затем "b" в режиме команд.
Создание столбчатой диаграммы с равномерным значением альфа
Введите и запустите следующий код в новой ячейке:
import matplotlib.pyplot as plt
import numpy as np
## Set a random seed for reproducibility
np.random.seed(19680801)
## Create a figure and an axes
fig, ax = plt.subplots(figsize=(10, 6))
## Generate data
x_values = list(range(20)) ## 0 to 19
y_values = np.random.randn(20) ## 20 random values from standard normal distribution
## Determine bar colors based on y-values (green for positive, red for negative)
facecolors = ['green' if y > 0 else 'red' for y in y_values]
edgecolors = facecolors ## Same color for edges
## Create the bar chart with alpha=0.5 for all bars
ax.bar(x_values, y_values, color=facecolors, edgecolor=edgecolors, alpha=0.5)
## Add a title and labels
ax.set_title("Bar Chart with Uniform Alpha Value (alpha=0.5)")
ax.set_xlabel("X Values")
ax.set_ylabel("Y Values")
## Add a grid for better readability
ax.grid(True, linestyle='--', alpha=0.7)
## Show the plot
plt.show()
Понимание кода и результата
После запуска кода вы должны увидеть столбчатую диаграмму с 20 столбцами. Каждый столбец либо зеленый (положительное значение по оси Y), либо красный (отрицательное значение по оси Y) с одинаковым уровнем прозрачности (альфа = 0.5).
Разберем основные части кода:
np.random.seed(19680801)- Это гарантирует, что генерируемые случайные числа будут одинаковыми каждый раз, когда вы запускаете код.x_values = list(range(20))- Создает список целых чисел от 0 до 19 для оси X.y_values = np.random.randn(20)- Генерирует 20 случайных значений из стандартного нормального распределения для оси Y.facecolors = ['green' if y > 0 else 'red' for y in y_values]- Эта генерация списка присваивает зеленый цвет положительным значениям и красный - отрицательным.ax.bar(..., alpha=0.5)- Основная часть, которая устанавливает равномерное значение альфа, равное 0.5, для всех столбцов.
Равномерное значение альфа делает все столбцы одинаково прозрачными, что может быть полезно, когда вы хотите:
- Показать сетку фона сквозь столбцы
- Создать более нежную визуализацию
- Уравновесить визуальное доминирование всех элементов
На следующем этапе мы рассмотрим, как установить разные значения альфа для разных столбцов.
Создание столбчатой диаграммы с различными значениями альфа
На этом этапе мы будем использовать формат кортежа (matplotlib_color, alpha), чтобы присвоить разный уровень прозрачности каждому столбцу в зависимости от его значений данных.
Добавление новой ячейки
Добавьте новую ячейку в свой Jupyter Notebook, нажав кнопку "+" в панели инструментов или нажав "Esc", а затем "b" в режиме команд.
Создание столбчатой диаграммы с различными значениями альфа
Введите и запустите следующий код в новой ячейке:
import matplotlib.pyplot as plt
import numpy as np
## Set a random seed for reproducibility
np.random.seed(19680801)
## Create a figure and an axes
fig, ax = plt.subplots(figsize=(10, 6))
## Generate data (using the same data as in Step 2 for comparison)
x_values = list(range(20)) ## 0 to 19
y_values = np.random.randn(20) ## 20 random values from standard normal distribution
## Determine bar colors based on y-values (green for positive, red for negative)
facecolors = ['green' if y > 0 else 'red' for y in y_values]
edgecolors = facecolors ## Same color for edges
## Calculate alpha values based on the absolute y-values
## Normalize y values to get alpha values between 0.2 and 1.0
abs_y = [abs(y) for y in y_values]
max_abs_y = max(abs_y)
face_alphas = [0.2 + 0.8 * (val / max_abs_y) for val in abs_y]
## Create color-alpha tuples for each bar
colors_with_alphas = list(zip(facecolors, face_alphas))
## Create the bar chart with varying alpha values
ax.bar(x_values, y_values, color=colors_with_alphas, edgecolor=edgecolors)
## Add a title and labels
ax.set_title("Bar Chart with Varying Alpha Values Based on Bar Height")
ax.set_xlabel("X Values")
ax.set_ylabel("Y Values")
## Add a grid for better readability
ax.grid(True, linestyle='--', alpha=0.7)
## Show the plot
plt.show()
Понимание кода и результата
После запуска кода вы должны увидеть столбчатую диаграмму с 20 столбцами. Каждый столбец имеет уровень прозрачности, пропорциональный абсолютному значению по оси Y - более высокие столбцы более непрозрачны, более низкие - более прозрачны.
Разберем основные части кода:
abs_y = [abs(y) for y in y_values]- Это создает список абсолютных значений всех значений по оси Y.max_abs_y = max(abs_y)- Находит максимальное абсолютное значение для нормализации данных.face_alphas = [0.2 + 0.8 * (val / max_abs_y) for val in abs_y]- Вычисляет значения альфа от 0.2 до 1.0 на основе нормализованных абсолютных значений по оси Y.colors_with_alphas = list(zip(facecolors, face_alphas))- Создает список кортежей (цвет, альфа), сопоставляя каждый цвет с соответствующим значением альфа.ax.bar(..., color=colors_with_alphas, ...)- Использует кортежи (цвет, альфа) для установки разных значений альфа для каждого столбца.
Подход с использованием различных уровней прозрачности эффективен для:
- Подчеркивания более значимых точек данных
- Сглаживания менее значимых точек данных
- Создания визуальной иерархии на основе значений данных
- Добавления дополнительного измерения информации в визуализацию
Вы можете четко увидеть, как различные значения альфа создают визуальный эффект, при котором величина точки данных подчеркивается как высотой столбца, так и его непрозрачностью.
Создание точечной диаграммы с использованием значений альфа
На этом этапе мы применим наши знания о значениях альфа для создания точечной диаграммы. Это продемонстрирует, как прозрачность может помочь визуализировать плотность данных в точечных диаграммах с перекрывающимися точками.
Добавление новой ячейки
Добавьте новую ячейку в свой Jupyter Notebook, нажав кнопку "+" в панели инструментов или нажав "Esc", а затем "b" в режиме команд.
Создание точечной диаграммы с прозрачностью
Введите и запустите следующий код в новой ячейке:
import matplotlib.pyplot as plt
import numpy as np
## Set a random seed for reproducibility
np.random.seed(19680801)
## Create a figure and an axes
fig, ax = plt.subplots(figsize=(10, 6))
## Create two clusters of points
cluster1_x = np.random.normal(0.3, 0.15, 500)
cluster1_y = np.random.normal(0.3, 0.15, 500)
cluster2_x = np.random.normal(0.7, 0.15, 500)
cluster2_y = np.random.normal(0.7, 0.15, 500)
## Combine the clusters
x = np.concatenate([cluster1_x, cluster2_x])
y = np.concatenate([cluster1_y, cluster2_y])
## Create a scatter plot with alpha=0.5
scatter = ax.scatter(x, y, s=30, c='blue', alpha=0.5)
## Add a title and labels
ax.set_title("Scatter Plot with Alpha=0.5 Showing Data Density")
ax.set_xlabel("X")
ax.set_ylabel("Y")
## Set axis limits
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
## Add a grid
ax.grid(True, linestyle='--', alpha=0.7)
## Show the plot
plt.show()
Понимание кода и результата
После запуска кода вы должны увидеть точечную диаграмму с двумя кластерами точек. Каждая точка имеет уровень прозрачности 0.5, что позволяет увидеть, где точки перекрываются.
Разберем основные части кода:
cluster1_x = np.random.normal(0.3, 0.15, 500)- Генерирует 500 случайных значений x по нормальному распределению со средним значением 0.3 и стандартным отклонением 0.15.cluster1_y = np.random.normal(0.3, 0.15, 500)- Генерирует 500 случайных значений y для первого кластера.cluster2_xиcluster2_y- Аналогично генерируют координаты для второго кластера, центрированного в точке (0.7, 0.7).ax.scatter(..., alpha=0.5)- Создает точечную диаграмму с точками, имеющими 50%-ную непрозрачность.
Преимущества использования альфа в точечных диаграммах включают:
Визуализация плотности: Области, где много точек перекрываются, выглядят темнее, что позволяет увидеть плотность данных.
Уменьшение перекрытия точек: Без прозрачности перекрывающиеся точки полностью бы скрывали друг друга.
Распознавание паттернов: Прозрачность помогает идентифицировать кластеры и паттерны в данных.
Обратите внимание, как области с большим количеством перекрывающихся точек выглядят темнее на визуализации. Это мощный способ визуализации плотности данных без необходимости использования дополнительных методов, таких как оценка плотности.
Создание комбинированной визуализации с использованием различных методов настройки прозрачности (альфа-значений)
На этом последнем этапе мы объединим несколько методов для создания более сложной визуализации, которая демонстрирует как одинаковые, так и переменные значения прозрачности (альфа-значения) на одном графике.
Добавление новой ячейки
Добавьте новую ячейку в свой Jupyter Notebook, нажав кнопку "+" в панели инструментов или нажав "Esc", а затем "b" в режиме команд.
Создание комбинированной визуализации
Введите и запустите следующий код в новой ячейке:
import matplotlib.pyplot as plt
import numpy as np
## Set a random seed for reproducibility
np.random.seed(19680801)
## Create a figure with two subplots side by side
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
## Generate some common data
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) * np.cos(x)
## First subplot: Fixed alpha for all lines
ax1.plot(x, y1, color='red', linewidth=2, label='sin(x)', alpha=0.7)
ax1.plot(x, y2, color='blue', linewidth=2, label='cos(x)', alpha=0.7)
ax1.plot(x, y3, color='green', linewidth=2, label='sin(x)cos(x)', alpha=0.7)
## Add title and legend to first subplot
ax1.set_title("Multiple Lines with Uniform Alpha")
ax1.set_xlabel("x")
ax1.set_ylabel("y")
ax1.legend()
ax1.grid(True, linestyle='--', alpha=0.5)
## Second subplot: Scatter plot with varying alpha based on y-value
sizes = np.abs(y3 * 100) + 10 ## Vary point sizes based on y3
colors = y3 ## Use y3 values for coloring
## Calculate varying alpha values between 0.3 and 1.0 based on absolute y3 values
alphas = 0.3 + 0.7 * (np.abs(y3) / max(np.abs(y3)))
## Create a scatter plot with varying sizes, colors, and alphas
scatter = ax2.scatter(x, y3, s=sizes, c=colors, cmap='viridis',
alpha=alphas)
## Add title and labels to second subplot
ax2.set_title("Scatter Plot with Varying Alpha Based on Y-Value")
ax2.set_xlabel("x")
ax2.set_ylabel("sin(x)cos(x)")
ax2.grid(True, linestyle='--', alpha=0.5)
## Add a colorbar to the second subplot
cbar = plt.colorbar(scatter, ax=ax2)
cbar.set_label('Value of sin(x)cos(x)')
## Adjust layout and show the plot
plt.tight_layout()
plt.show()
Понимание кода и результата
После запуска кода вы должны увидеть фигуру с двумя подграфиками, расположенными рядом друг с другом:
Левый подграфик (одинаковая прозрачность): Показывает три тригонометрические функции, построенные с одинаковым значением прозрачности (альфа = 0.7).
Правый подграфик (переменная прозрачность): Показывает точечную диаграмму, где:
- Координата x - это входное значение.
- Координата y - это sin(x)cos(x).
- Размер каждой точки изменяется в зависимости от абсолютного значения y.
- Цвет каждой точки изменяется в зависимости от значения y.
- Прозрачность (альфа) каждой точки изменяется в зависимости от абсолютного значения y.
Разберём основные части кода:
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))- Создает фигуру с двумя подграфиками, расположенными рядом друг с другом.Для первого подграфика:
ax1.plot(..., alpha=0.7)- Использует одинаковое значение прозрачности для всех трех линий.
Для второго подграфика:
alphas = 0.3 + 0.7 * (np.abs(y3) / max(np.abs(y3)))- Вычисляет переменные значения прозрачности в диапазоне от 0.3 до 1.0.ax2.scatter(..., alpha=alphas)- Использует переменные значения прозрачности для точек точечной диаграммы.
Это сочетание методов демонстрирует, как значения прозрачности (альфа-значения) могут быть использованы различными способами для улучшения визуализаций:
Одинаковая прозрачность полезна, когда вам нужно показать несколько перекрывающихся элементов с равной важностью.
Переменная прозрачность полезна, когда вы хотите подчеркнуть определенные точки данных в зависимости от их значений.
Освоив эти методы, вы сможете создавать более эффективные и визуально привлекательные визуализации данных.
Резюме
В этом практическом занятии (лабораторной работе) вы научились использовать значения альфа (прозрачность) в библиотеке Matplotlib для улучшения визуализации данных. Давайте обобщим то, что мы изучили:
Основные концепции
Значения альфа: Значения альфа варьируются от 0 (полностью прозрачный) до 1 (полностью непрозрачный) и определяют прозрачность визуальных элементов.
Установка одинаковой прозрачности: Вы можете использовать ключевой аргумент
alphaдля установки одного и того же уровня прозрачности для всех элементов на графике.plt.plot(x, y, alpha=0.5)Установка переменной прозрачности: Вы можете использовать формат кортежа
(цвет, альфа)для установки разных уровней прозрачности для разных элементов.colors_with_alphas = list(zip(colors, alpha_values)) plt.bar(x, y, color=colors_with_alphas)
Практические применения
- Перекрывающиеся элементы: Значения альфа помогают визуализировать перекрывающиеся элементы, делая их прозрачными.
- Плотность данных: На точечных диаграммах значения альфа показывают области с высокой плотностью данных.
- Подчеркивание данных: Переменные значения альфа могут подчеркивать важные точки данных, уменьшая акцент на менее важных.
- Визуальная иерархия: Разные уровни прозрачности создают визуальную иерархию на графике.
Что вы создали
- Простое демонстрационное представление значений альфа с перекрывающимися кругами
- Столбчатую диаграмму с одинаковой прозрачностью
- Столбчатую диаграмму с переменной прозрачностью в зависимости от высоты столбцов
- Точечную диаграмму с использованием альфа для отображения плотности данных
- Комбинированную визуализацию, демонстрирующую как одинаковую, так и переменную прозрачность
Эти методы позволят вам создавать более эффективные и визуально привлекательные визуализации данных, которые лучше передают смысл ваших данных.