색상의 알파 값 설정 방법

Beginner

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 팁

VM 시작이 완료되면 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위한 Jupyter Notebook 에 액세스하십시오.

click-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" 버튼을 클릭하여 실행합니다.

출력 이해하기

두 개의 겹치는 원이 표시되어야 합니다.

  • 왼쪽에 있는 파란색 원은 완전히 불투명합니다 (alpha=1.0).
  • 오른쪽에 있는 빨간색 원은 반투명합니다 (alpha=0.5).

겹치는 부분에서 빨간색 원을 통해 파란색 원을 볼 수 있는지 확인하십시오. 이것이 빨간색 원에 대해 알파 값을 0.5 로 설정한 효과입니다.

알파 값은 시각화에서 투명도를 제어하며 다음과 같은 경우에 도움이 될 수 있습니다.

  • 겹치는 데이터 포인트를 표시할 때
  • 특정 요소를 강조 표시할 때
  • 밀집된 플롯에서 시각적 혼잡을 줄일 때
  • 레이어드 시각화를 만들 때

다음 단계에서 알파 값의 더 많은 응용 프로그램을 계속 탐색해 보겠습니다.

균일한 알파 값으로 막대 차트 만들기

이 단계에서는 alpha 키워드 인수를 사용하여 모든 막대가 동일한 투명도 수준을 갖는 막대 차트를 만듭니다.

새 셀 추가

도구 모음에서 "+" 버튼을 클릭하거나 명령 모드에서 "Esc"를 누른 다음 "b"를 눌러 Jupyter Notebook 에 새 셀을 추가합니다.

균일한 알파로 막대 차트 만들기

새 셀에 다음 코드를 입력하고 실행합니다.

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 개의 막대가 있는 막대 차트가 표시되어야 합니다. 각 막대는 동일한 투명도 수준 (alpha=0.5) 으로 녹색 (양수 y 값) 또는 빨간색 (음수 y 값) 입니다.

주요 부분을 분석해 보겠습니다.

  1. np.random.seed(19680801) - 이 코드는 코드를 실행할 때마다 생성되는 난수가 동일하도록 보장합니다.

  2. x_values = list(range(20)) - x 축에 대해 0 에서 19 까지의 정수 목록을 만듭니다.

  3. y_values = np.random.randn(20) - y 축에 대해 표준 정규 분포에서 20 개의 임의 값을 생성합니다.

  4. facecolors = ['green' if y > 0 else 'red' for y in y_values] - 이 리스트 컴프리헨션은 양수 값에 녹색을, 음수 값에 빨간색을 할당합니다.

  5. ax.bar(..., alpha=0.5) - 모든 막대에 대해 균일한 알파 값 0.5 를 설정하는 핵심 부분입니다.

균일한 알파 값은 모든 막대를 동일하게 투명하게 만들며, 다음과 같은 경우에 유용할 수 있습니다.

  • 막대를 통해 배경 격자선을 표시하려는 경우
  • 더 미묘한 시각화를 만들려는 경우
  • 모든 요소의 시각적 지배력을 동일하게 줄이려는 경우

다음 단계에서는 서로 다른 막대에 대해 서로 다른 알파 값을 설정하는 방법을 살펴보겠습니다.

가변적인 알파 값으로 막대 차트 만들기

이 단계에서는 (matplotlib_color, alpha) 튜플 형식을 사용하여 각 막대의 데이터 값에 따라 서로 다른 투명도 수준을 할당합니다.

새 셀 추가

도구 모음에서 "+" 버튼을 클릭하거나 명령 모드에서 "Esc"를 누른 다음 "b"를 눌러 Jupyter Notebook 에 새 셀을 추가합니다.

가변적인 알파 값으로 막대 차트 만들기

새 셀에 다음 코드를 입력하고 실행합니다.

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] - 정규화된 절대 y 값을 기반으로 0.2 에서 1.0 사이의 알파 값을 계산합니다.

  4. colors_with_alphas = list(zip(facecolors, face_alphas)) - 각 색상을 해당 알파 값과 쌍으로 묶어 (색상, 알파) 튜플 목록을 만듭니다.

  5. ax.bar(..., color=colors_with_alphas, ...) - (색상, 알파) 튜플을 사용하여 각 막대에 대해 서로 다른 알파 값을 설정합니다.

가변적인 투명도 수준을 사용하는 이 접근 방식은 다음과 같은 경우에 효과적입니다.

  • 더 중요한 데이터 포인트를 강조할 때
  • 덜 중요한 데이터 포인트를 강조하지 않을 때
  • 데이터 값을 기반으로 시각적 계층 구조를 만들 때
  • 시각화에 추가적인 정보 차원을 추가할 때

가변적인 알파 값이 막대 높이와 불투명도 모두에 의해 데이터 포인트의 크기가 강조되는 시각적 효과를 어떻게 만드는지 명확하게 볼 수 있습니다.

알파 값으로 산점도 만들기

이 단계에서는 알파 값에 대한 지식을 적용하여 산점도를 만듭니다. 이는 투명도가 겹치는 점이 있는 산점도에서 데이터 밀도를 시각화하는 데 어떻게 도움이 되는지 보여줍니다.

새 셀 추가

도구 모음에서 "+" 버튼을 클릭하거나 명령 모드에서 "Esc"를 누른 다음 "b"를 눌러 Jupyter Notebook 에 새 셀을 추가합니다.

투명도를 사용하여 산점도 만들기

새 셀에 다음 코드를 입력하고 실행합니다.

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) - 평균 0.3, 표준 편차 0.15 인 정규 분포를 따르는 500 개의 임의 x 좌표를 생성합니다.

  2. cluster1_y = np.random.normal(0.3, 0.15, 500) - 첫 번째 클러스터에 대해 500 개의 임의 y 좌표를 생성합니다.

  3. cluster2_xcluster2_y - 마찬가지로 (0.7, 0.7) 을 중심으로 하는 두 번째 클러스터에 대한 좌표를 생성합니다.

  4. ax.scatter(..., alpha=0.5) - 50% 불투명도로 점이 있는 산점도를 만듭니다.

산점도에서 알파를 사용하면 다음과 같은 이점이 있습니다.

  1. 밀도 시각화: 많은 점이 겹치는 영역은 더 어둡게 나타나 데이터 밀도를 보여줍니다.

  2. 과도한 플로팅 감소: 투명도가 없으면 겹치는 점이 서로 완전히 숨겨집니다.

  3. 패턴 인식: 투명도는 데이터에서 클러스터와 패턴을 식별하는 데 도움이 됩니다.

더 많은 점이 겹치는 영역이 시각화에서 더 어둡게 나타나는 것을 확인하십시오. 이는 밀도 추정과 같은 추가 기술 없이 데이터 밀도를 시각화하는 강력한 방법입니다.

다양한 알파 기술을 사용한 결합된 시각화 만들기

이 마지막 단계에서는 여러 기술을 결합하여 하나의 플롯에서 균일하고 가변적인 알파 값을 모두 보여주는 보다 복잡한 시각화를 만듭니다.

새 셀 추가

도구 모음에서 "+" 버튼을 클릭하거나 명령 모드에서 "Esc"를 누른 다음 "b"를 눌러 Jupyter Notebook 에 새 셀을 추가합니다.

결합된 시각화 만들기

새 셀에 다음 코드를 입력하고 실행합니다.

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. 알파 값 (Alpha Values): 알파 값은 0(완전 투명) 에서 1(완전 불투명) 까지이며 시각적 요소의 투명도를 결정합니다.

  2. 균일한 알파 설정: alpha 키워드 인수를 사용하여 플롯의 모든 요소에 대해 동일한 투명도 수준을 설정할 수 있습니다.

    plt.plot(x, y, alpha=0.5)
  3. 가변적인 알파 설정: (color, alpha) 튜플 형식을 사용하여 서로 다른 요소에 대해 서로 다른 투명도 수준을 설정할 수 있습니다.

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

실제 적용

  • 겹치는 요소: 알파 값은 겹치는 요소를 투명하게 만들어 시각화하는 데 도움이 됩니다.
  • 데이터 밀도: 산점도에서 알파 값은 데이터 밀도가 높은 영역을 보여줍니다.
  • 데이터 강조: 가변적인 알파 값은 중요 데이터 포인트를 강조하는 동시에 덜 중요한 데이터 포인트를 강조하지 않도록 할 수 있습니다.
  • 시각적 계층 구조: 서로 다른 투명도 수준은 플롯에서 시각적 계층 구조를 만듭니다.

생성한 내용

  1. 겹치는 원을 사용한 알파 값의 간단한 데모
  2. 균일한 투명도를 가진 막대 차트
  3. 막대 높이에 따라 투명도가 다른 막대 차트
  4. 데이터 밀도를 보여주기 위해 알파를 사용하는 산점도
  5. 균일하고 가변적인 알파 기술을 모두 보여주는 결합된 시각화

이러한 기술을 통해 데이터의 스토리를 더 잘 전달하는 보다 효과적이고 시각적으로 매력적인 데이터 시각화를 만들 수 있습니다.