Способы установки альфа-значения цвета

MatplotlibMatplotlibBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) исследуется, как устанавливать прозрачность цвета (значения альфа) с использованием библиотеки Python Matplotlib. В визуализации данных прозрачность является мощным инструментом, который может выявить закономерности в перекрывающихся элементах или выделить определенные точки данных.

Значения альфа в Matplotlib находятся в диапазоне от 0 до 1:

  • 0 означает полную прозрачность (невидимость)
  • 1 означает полную непрозрачность (сплошной цвет)
  • Значения между 0 и 1 создают различные уровни прозрачности

Мы рассмотрим два основных подхода к установке значений альфа в Matplotlib:

  1. Использование ключевого аргумента alpha
  2. Использование формата цвета (matplotlib_color, alpha)

По завершении этого практического занятия вы сможете создавать визуализации с настраиваемыми параметрами прозрачности, которые улучшат представление ваших данных.

Советы по виртуальной машине (VM)

После завершения запуска виртуальной машины нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

click-notebook

Вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Из-за ограничений Jupyter Notebook автоматизация проверки операций невозможна.

Если вы столкнетесь с какими-либо проблемами во время практического занятия, не стесняйтесь обращаться к Labby за помощью. Мы будем благодарны за ваш отзыв после занятия, чтобы помочь нам улучшить опыт проведения практических занятий.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL matplotlib(("Matplotlib")) -.-> matplotlib/BasicConceptsGroup(["Basic Concepts"]) matplotlib(("Matplotlib")) -.-> matplotlib/PlottingDataGroup(["Plotting Data"]) matplotlib(("Matplotlib")) -.-> matplotlib/AdvancedPlottingGroup(["Advanced Plotting"]) matplotlib(("Matplotlib")) -.-> matplotlib/PlotCustomizationGroup(["Plot Customization"]) matplotlib/BasicConceptsGroup -.-> matplotlib/figures_axes("Understanding Figures and Axes") matplotlib/PlottingDataGroup -.-> matplotlib/line_plots("Line Plots") matplotlib/PlottingDataGroup -.-> matplotlib/scatter_plots("Scatter Plots") matplotlib/PlottingDataGroup -.-> matplotlib/bar_charts("Bar Charts") matplotlib/AdvancedPlottingGroup -.-> matplotlib/subplots("Subplots") matplotlib/PlotCustomizationGroup -.-> matplotlib/titles_labels("Adding Titles and Labels") matplotlib/PlotCustomizationGroup -.-> matplotlib/legend_config("Legend Configuration") matplotlib/PlotCustomizationGroup -.-> matplotlib/grid_config("Grid Configuration") subgraph Lab Skills matplotlib/figures_axes -.-> lab-48922{{"Способы установки альфа-значения цвета"}} matplotlib/line_plots -.-> lab-48922{{"Способы установки альфа-значения цвета"}} matplotlib/scatter_plots -.-> lab-48922{{"Способы установки альфа-значения цвета"}} matplotlib/bar_charts -.-> lab-48922{{"Способы установки альфа-значения цвета"}} matplotlib/subplots -.-> lab-48922{{"Способы установки альфа-значения цвета"}} matplotlib/titles_labels -.-> lab-48922{{"Способы установки альфа-значения цвета"}} matplotlib/legend_config -.-> lab-48922{{"Способы установки альфа-значения цвета"}} matplotlib/grid_config -.-> lab-48922{{"Способы установки альфа-значения цвета"}} end

Понимание значений альфа в 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).

Разберем основные части кода:

  1. np.random.seed(19680801) - Это гарантирует, что генерируемые случайные числа будут одинаковыми каждый раз, когда вы запускаете код.

  2. x_values = list(range(20)) - Создает список целых чисел от 0 до 19 для оси X.

  3. y_values = np.random.randn(20) - Генерирует 20 случайных значений из стандартного нормального распределения для оси Y.

  4. facecolors = ['green' if y > 0 else 'red' for y in y_values] - Эта генерация списка присваивает зеленый цвет положительным значениям и красный - отрицательным.

  5. 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 - более высокие столбцы более непрозрачны, более низкие - более прозрачны.

Разберем основные части кода:

  1. abs_y = [abs(y) for y in y_values] - Это создает список абсолютных значений всех значений по оси Y.

  2. max_abs_y = max(abs_y) - Находит максимальное абсолютное значение для нормализации данных.

  3. face_alphas = [0.2 + 0.8 * (val / max_abs_y) for val in abs_y] - Вычисляет значения альфа от 0.2 до 1.0 на основе нормализованных абсолютных значений по оси Y.

  4. colors_with_alphas = list(zip(facecolors, face_alphas)) - Создает список кортежей (цвет, альфа), сопоставляя каждый цвет с соответствующим значением альфа.

  5. 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, что позволяет увидеть, где точки перекрываются.

Разберем основные части кода:

  1. cluster1_x = np.random.normal(0.3, 0.15, 500) - Генерирует 500 случайных значений x по нормальному распределению со средним значением 0.3 и стандартным отклонением 0.15.

  2. cluster1_y = np.random.normal(0.3, 0.15, 500) - Генерирует 500 случайных значений y для первого кластера.

  3. cluster2_x и cluster2_y - Аналогично генерируют координаты для второго кластера, центрированного в точке (0.7, 0.7).

  4. ax.scatter(..., alpha=0.5) - Создает точечную диаграмму с точками, имеющими 50%-ную непрозрачность.

Преимущества использования альфа в точечных диаграммах включают:

  1. Визуализация плотности: Области, где много точек перекрываются, выглядят темнее, что позволяет увидеть плотность данных.

  2. Уменьшение перекрытия точек: Без прозрачности перекрывающиеся точки полностью бы скрывали друг друга.

  3. Распознавание паттернов: Прозрачность помогает идентифицировать кластеры и паттерны в данных.

Обратите внимание, как области с большим количеством перекрывающихся точек выглядят темнее на визуализации. Это мощный способ визуализации плотности данных без необходимости использования дополнительных методов, таких как оценка плотности.

Создание комбинированной визуализации с использованием различных методов настройки прозрачности (альфа-значений)

На этом последнем этапе мы объединим несколько методов для создания более сложной визуализации, которая демонстрирует как одинаковые, так и переменные значения прозрачности (альфа-значения) на одном графике.

Добавление новой ячейки

Добавьте новую ячейку в свой 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()

Понимание кода и результата

После запуска кода вы должны увидеть фигуру с двумя подграфиками, расположенными рядом друг с другом:

  1. Левый подграфик (одинаковая прозрачность): Показывает три тригонометрические функции, построенные с одинаковым значением прозрачности (альфа = 0.7).

  2. Правый подграфик (переменная прозрачность): Показывает точечную диаграмму, где:

    • Координата x - это входное значение.
    • Координата y - это sin(x)cos(x).
    • Размер каждой точки изменяется в зависимости от абсолютного значения y.
    • Цвет каждой точки изменяется в зависимости от значения y.
    • Прозрачность (альфа) каждой точки изменяется в зависимости от абсолютного значения y.

Разберём основные части кода:

  1. fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6)) - Создает фигуру с двумя подграфиками, расположенными рядом друг с другом.

  2. Для первого подграфика:

    • ax1.plot(..., alpha=0.7) - Использует одинаковое значение прозрачности для всех трех линий.
  3. Для второго подграфика:

    • alphas = 0.3 + 0.7 * (np.abs(y3) / max(np.abs(y3))) - Вычисляет переменные значения прозрачности в диапазоне от 0.3 до 1.0.
    • ax2.scatter(..., alpha=alphas) - Использует переменные значения прозрачности для точек точечной диаграммы.

Это сочетание методов демонстрирует, как значения прозрачности (альфа-значения) могут быть использованы различными способами для улучшения визуализаций:

  • Одинаковая прозрачность полезна, когда вам нужно показать несколько перекрывающихся элементов с равной важностью.

  • Переменная прозрачность полезна, когда вы хотите подчеркнуть определенные точки данных в зависимости от их значений.

Освоив эти методы, вы сможете создавать более эффективные и визуально привлекательные визуализации данных.

Резюме

В этом практическом занятии (лабораторной работе) вы научились использовать значения альфа (прозрачность) в библиотеке Matplotlib для улучшения визуализации данных. Давайте обобщим то, что мы изучили:

Основные концепции

  1. Значения альфа: Значения альфа варьируются от 0 (полностью прозрачный) до 1 (полностью непрозрачный) и определяют прозрачность визуальных элементов.

  2. Установка одинаковой прозрачности: Вы можете использовать ключевой аргумент alpha для установки одного и того же уровня прозрачности для всех элементов на графике.

    plt.plot(x, y, alpha=0.5)
  3. Установка переменной прозрачности: Вы можете использовать формат кортежа (цвет, альфа) для установки разных уровней прозрачности для разных элементов.

    colors_with_alphas = list(zip(colors, alpha_values))
    plt.bar(x, y, color=colors_with_alphas)

Практические применения

  • Перекрывающиеся элементы: Значения альфа помогают визуализировать перекрывающиеся элементы, делая их прозрачными.
  • Плотность данных: На точечных диаграммах значения альфа показывают области с высокой плотностью данных.
  • Подчеркивание данных: Переменные значения альфа могут подчеркивать важные точки данных, уменьшая акцент на менее важных.
  • Визуальная иерархия: Разные уровни прозрачности создают визуальную иерархию на графике.

Что вы создали

  1. Простое демонстрационное представление значений альфа с перекрывающимися кругами
  2. Столбчатую диаграмму с одинаковой прозрачностью
  3. Столбчатую диаграмму с переменной прозрачностью в зависимости от высоты столбцов
  4. Точечную диаграмму с использованием альфа для отображения плотности данных
  5. Комбинированную визуализацию, демонстрирующую как одинаковую, так и переменную прозрачность

Эти методы позволят вам создавать более эффективные и визуально привлекательные визуализации данных, которые лучше передают смысл ваших данных.