소개
이 랩에서는 Python Matplotlib 라이브러리를 사용하여 색상 투명도 (알파 값) 를 설정하는 방법을 살펴봅니다. 데이터 시각화에서 투명도는 겹치는 요소의 패턴을 드러내거나 특정 데이터 포인트를 강조 표시할 수 있는 강력한 도구입니다.
Matplotlib 의 알파 값은 0 에서 1 까지의 범위를 갖습니다.
- 0 은 완전히 투명 (보이지 않음) 을 의미합니다.
- 1 은 완전히 불투명 (고체) 을 의미합니다.
- 0 과 1 사이의 값은 다양한 수준의 투명도를 생성합니다.
Matplotlib 에서 알파 값을 설정하는 두 가지 주요 접근 방식을 살펴보겠습니다.
alpha키워드 인수를 사용합니다.(matplotlib_color, alpha)색상 형식을 사용합니다.
이 랩이 끝나면 데이터 프레젠테이션을 향상시키는 사용자 정의 투명도 설정을 사용하여 시각화를 만들 수 있습니다.
VM 팁
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" 버튼을 클릭하여 실행합니다.
출력 이해하기
두 개의 겹치는 원이 표시되어야 합니다.
- 왼쪽에 있는 파란색 원은 완전히 불투명합니다 (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 값) 입니다.
주요 부분을 분석해 보겠습니다.
np.random.seed(19680801)- 이 코드는 코드를 실행할 때마다 생성되는 난수가 동일하도록 보장합니다.x_values = list(range(20))- x 축에 대해 0 에서 19 까지의 정수 목록을 만듭니다.y_values = np.random.randn(20)- y 축에 대해 표준 정규 분포에서 20 개의 임의 값을 생성합니다.facecolors = ['green' if y > 0 else 'red' for y in y_values]- 이 리스트 컴프리헨션은 양수 값에 녹색을, 음수 값에 빨간색을 할당합니다.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 값에 비례하는 투명도 수준을 갖습니다. 즉, 더 높은 막대는 더 불투명하고, 더 짧은 막대는 더 투명합니다.
코드의 주요 부분을 분석해 보겠습니다.
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]- 정규화된 절대 y 값을 기반으로 0.2 에서 1.0 사이의 알파 값을 계산합니다.colors_with_alphas = list(zip(facecolors, face_alphas))- 각 색상을 해당 알파 값과 쌍으로 묶어 (색상, 알파) 튜플 목록을 만듭니다.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 의 투명도 수준을 가지므로 점이 겹치는 부분을 볼 수 있습니다.
코드의 주요 부분을 분석해 보겠습니다.
cluster1_x = np.random.normal(0.3, 0.15, 500)- 평균 0.3, 표준 편차 0.15 인 정규 분포를 따르는 500 개의 임의 x 좌표를 생성합니다.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% 불투명도로 점이 있는 산점도를 만듭니다.
산점도에서 알파를 사용하면 다음과 같은 이점이 있습니다.
밀도 시각화: 많은 점이 겹치는 영역은 더 어둡게 나타나 데이터 밀도를 보여줍니다.
과도한 플로팅 감소: 투명도가 없으면 겹치는 점이 서로 완전히 숨겨집니다.
패턴 인식: 투명도는 데이터에서 클러스터와 패턴을 식별하는 데 도움이 됩니다.
더 많은 점이 겹치는 영역이 시각화에서 더 어둡게 나타나는 것을 확인하십시오. 이는 밀도 추정과 같은 추가 기술 없이 데이터 밀도를 시각화하는 강력한 방법입니다.
다양한 알파 기술을 사용한 결합된 시각화 만들기
이 마지막 단계에서는 여러 기술을 결합하여 하나의 플롯에서 균일하고 가변적인 알파 값을 모두 보여주는 보다 복잡한 시각화를 만듭니다.
새 셀 추가
도구 모음에서 "+" 버튼을 클릭하거나 명령 모드에서 "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()
코드 및 출력 이해하기
코드를 실행한 후 두 개의 서브플롯이 나란히 있는 그림이 표시되어야 합니다.
왼쪽 서브플롯 (균일한 알파): 동일한 알파 값 (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 에서 알파 값 (투명도) 을 사용하여 데이터 시각화를 향상시키는 방법을 배웠습니다. 다룬 내용을 요약해 보겠습니다.
주요 개념
알파 값 (Alpha Values): 알파 값은 0(완전 투명) 에서 1(완전 불투명) 까지이며 시각적 요소의 투명도를 결정합니다.
균일한 알파 설정:
alpha키워드 인수를 사용하여 플롯의 모든 요소에 대해 동일한 투명도 수준을 설정할 수 있습니다.plt.plot(x, y, alpha=0.5)가변적인 알파 설정:
(color, alpha)튜플 형식을 사용하여 서로 다른 요소에 대해 서로 다른 투명도 수준을 설정할 수 있습니다.colors_with_alphas = list(zip(colors, alpha_values)) plt.bar(x, y, color=colors_with_alphas)
실제 적용
- 겹치는 요소: 알파 값은 겹치는 요소를 투명하게 만들어 시각화하는 데 도움이 됩니다.
- 데이터 밀도: 산점도에서 알파 값은 데이터 밀도가 높은 영역을 보여줍니다.
- 데이터 강조: 가변적인 알파 값은 중요 데이터 포인트를 강조하는 동시에 덜 중요한 데이터 포인트를 강조하지 않도록 할 수 있습니다.
- 시각적 계층 구조: 서로 다른 투명도 수준은 플롯에서 시각적 계층 구조를 만듭니다.
생성한 내용
- 겹치는 원을 사용한 알파 값의 간단한 데모
- 균일한 투명도를 가진 막대 차트
- 막대 높이에 따라 투명도가 다른 막대 차트
- 데이터 밀도를 보여주기 위해 알파를 사용하는 산점도
- 균일하고 가변적인 알파 기술을 모두 보여주는 결합된 시각화
이러한 기술을 통해 데이터의 스토리를 더 잘 전달하는 보다 효과적이고 시각적으로 매력적인 데이터 시각화를 만들 수 있습니다.