[데이터 시각화 소개] matplotlib의 스타일링
matplotlib의 색상 선택
matplotlib와 함께 사용되는 시각화 라이브러리 Seaborn은 데이터 시각화 작업에서 색상의 중요성을 인식하여, 다양한 색상 팔레트를 제공 합니다. 색상은 데이터의 패턴, 구분 및 특성 강조에 큰 역할을 합니다. 특히, 데이터 집합 내의 그룹이나 값의 변동성을 시각적으로 나타내어 정보의 전달을 더욱 명확하게 합니다. matplotlib에서는 사용자가 색상을 지정할 때 HTML 색상 코드, RGB 튜플, RGBA 튜플, 또는 내장된 색상 이름을 사용할 수 있습니다.
색상 선택
matplotlib의 색상 선택 기능은 데이터의 특별한 부분을 강조하거나, 정보를 보다 읽기 쉽게 만드는 데 중요한 요소입니다. 예를 들어, 특정 데이터 포인트 또는 데이터 범위를 강조하기 위해 다른 색상을 사용할 수 있습니다.
색상을 지정하는 방법은 다양합니다:
- 내장된 색상 이름 (예: 'red', 'green')
- HEX 코드 (예: '#FF5733')
- RGB 또는 RGBA 튜플 (예: (0.1, 0.2, 0.5), (0.1, 0.2, 0.5, 0.3))
- Seaborn 팔레트를 통해 지정 (예: sns.color_palette("viridis"))
색상 팔레트
색상 팔레트는 미리 정의된 색상의 집합입니다. Seaborn은 여러 가지 아름다운 색상 팔레트를 제공하며, 이를 통해 데이터의 의미를 더욱 잘 전달할 수 있습니다. 예를 들어, 'viridis', 'plasma', 'inferno', 'magma'와 같은 색상 팔레트는 연속적인 데이터를 나타낼 때 적합합니다.
Seaborn을 이용한 색상 팔레트 사용 예시
import seaborn as sns
import matplotlib.pyplot as plt
# Seaborn의 'viridis' 팔레트 활용
sns.set_palette('viridis')
# 더미 데이터 생성
data = [1, 2, 3, 4, 5]
# 막대 그래프 생성
plt.bar(range(len(data)), data)
plt.show()
# 특정 팔레트의 색상 집합 접근
palette = sns.color_palette('plasma', n_colors=5)
print(palette) # RGB 값으로 구성된 색상 리스트 출력
# 이색적인 팔레트 사용
sns.palplot(sns.color_palette('coolwarm', 7))
위 코드에서는 Seaborn을 활용하여 'viridis' 색상 팔레트로 막대 그래프의 색상을 지정한 예시입니다. set_palette()
함수로 전역적으로 팔레트를 지정하거나, 개별 객체의 색상을 지정하려면 color_palette()
함수로 팔레트를 생성한 후 사용합니다. sns.palplot
은 주어진 팔레트를 시각적으로 나타내주는 유용한 함수입니다.
색상이나 색상 팔레트 선택은 데이터의 시각화에서 중요한 역할을 합니다. 적절한 색상의 선택은 데이터 시각화의 명확성과 효과적인 전달에 큰 도움을 줍니다. Seaborn에서 제공하는 다양한 색상 팔레트를 활용하여, 여러분의 데이터 시각화 작업을 한층 더 향상시켜 보세요.
matplotlib는 데이터 시각화에 있어서 매우 유연한 라이브러리입니다. 특히 텍스트와 글꼴 스타일링 옵션을 통해 정보를 시각적으로 전달하는 데 필요한 세부조정이 가능합니다. seaborn은 matplotlib를 기반으로 더 예쁜 디자인과 쉬운 문법을 제공하는 라이브러리이며, seaborn 설정을 통해서도 일부 글꼴과 텍스트 스타일을 조정할 수 있습니다.
글꼴 종류의 선택
matplotlib에서는 다양한 글꼴을 사용할 수 있습니다. 시스템에 설치된 글꼴을 사용하거나 별도의 글꼴 파일을 불러와 사용할 수 있습니다. 글꼴을 설정하는 방법은 여러 가지가 있지만, 가장 간단한 방법은 plt.rcParams
나 rcParams
를 사용하는 것입니다.
import matplotlib.pyplot as plt
# 전역 글꼴 설정
plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.serif'] = ['Times New Roman']
seaborn을 사용할 때는 seaborn의 set
함수를 통해 글꼴을 설정할 수 있습니다.
import seaborn as sns
sns.set(font='serif', font_scale=1.4)
텍스트 크기 및 배치
텍스트의 크기와 배치는 데이터 시각화의 가독성과 직접적으로 관련이 있습니다. plt.text()
, plt.xlabel()
, plt.ylabel()
, plt.title()
등의 함수를 사용할 때 fontsize
, verticalalignment
, horizontalalignment
같은 인수를 조정하여 텍스트의 크기와 위치를 조정할 수 있습니다.
plt.title('그래프 제목', fontsize=20, verticalalignment='bottom')
plt.xlabel('x축 레이블', fontsize=15, horizontalalignment='right')
텍스트 상자와 주석 사용
텍스트 설명이 필요한 특정 데이터 포인트에 주석을 추가할 수 있습니다. plt.annotate()
함수를 사용하여 추가 정보를 제공할 수 있습니다.
plt.annotate('주석 텍스트', xy=(10, 20), xytext=(30, 40),
arrowprops=dict(facecolor='black', shrink=0.05),
fontsize=12, color='green')
범례와 축 레이블 스타일링
범례(legend)는 그래프의 요소를 구별해주는 중요한 요소입니다. plt.legend()
를 사용하여 범례를 추가할 수 있으며, fontsize
와 title_fontsize
를 조정하여 그 크기를 정의할 수 있습니다.
plt.legend(title='범례 제목', fontsize='small', title_fontsize='large')
축 레이블(ax label)은 축의 데이터 종류를 설명하는 데에 사용됩니다. plt.xlabel()
과 plt.ylabel()
함수에 fontsize
인자를 사용하여 텍스트 크기를 조정할 수 있습니다.
툴팁 및 데이터 라벨
matplotlib에서는 기본적으로 툴팁(tooltip) 기능을 직접 제공하지 않습니다. 하지만 matplotlib의 이벤트 시스템을 사용하여 마우스 오버 시 툴팁을 표시하는 기능을 직접 구현할 수 있습니다.
데이터 라벨은 각 데이터 포인트에 값을 직접 표기하는 것으로, 반복문과 plt.text()
함수를 사용하여 데이터 포인트 위에 직접 값 라벨을 추가할 수 있습니다.
x = [1, 2, 3]
y = [4, 5, 6]
plt.scatter(x, y)
for i, txt in enumerate(y):
plt.text(x[i], y[i], str(txt))
위 예시와 같이 글꼴 및 텍스트 스타일링을 조정함으로써 시각화의 가독성과 전달력을 크게 향상시킬 수 있습니다.
마크와 라인 스타일링은 데이터 시각화에서 매우 중요한 부분입니다. 이를 통해 우리는 그래프에 나타나는 데이터 포인트의 시각적 표현을 세밀하게 조정할 수 있으며, 그래프의 가독성을 높이고 정보를 더욱 효과적으로 전달할 수 있습니다.
마크의 종류와 크기 조정
matplotlib와 함께 사용되는 seaborn 라이브러리는 산점도(scatter plot)와 같은 그래프에서 포인트의 마크를 세밀하게 조절할 수 있는 기능을 제공합니다. 마크(marker)는 데이터 포인트를 나타내는 데 사용되며, 다양한 형태와 크기로 표현할 수 있습니다.
예시 코드:
import seaborn as sns
import matplotlib.pyplot as plt
# 예제 데이터셋 로드
tips = sns.load_dataset("tips")
# 산점도 그리기
sns.scatterplot(data=tips, x="total_bill", y="tip", style="time", hue="day", size="size", sizes=(20, 200), markers=["o", "X"])
plt.show()
이 코드는 seaborn을 사용하여 "tips" 데이터셋의 산점도를 그립니다. style
인자로 "time"을 지정하여 점심과 저녁을 다른 마크로 표시하며, hue
는 요일별로 색상을 다르게 하여 가시성을 높입니다. size
와 sizes
인자를 통해 데이터 포인트의 크기를 조정하여 다양한 그룹의 크기 차이를 시각화합니다.
라인 스타일 및 두께 조정
선형 그래프(line graph)에서는 선의 스타일과 두께를 조정함으로써 다양한 정보를 전달할 수 있습니다. 예를 들어, 시간에 따른 데이터의 추세를 보여주는 데 있어서 서로 다른 선 스타일을 사용하여 여러 데이터 시리즈를 구분할 수 있습니다.
예시 코드:
import numpy as np
# 예제 데이터 생성
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 기본 선 그래프 그리기
plt.plot(x, y1, '-r', label='sine wave', linewidth=2)
plt.plot(x, y2, '--g', label='cosine wave', linewidth=2)
plt.legend()
plt.show()
이 코드는 NumPy를 사용하여 생성한 데이터를 기반으로 matplotlib를 이용해 두 개의 선형 그래프를 그립니다. 첫 번째 선(y1
)은 빨간색의 실선으로 linewidth=2
를 통해 선의 두께를 조절합니다. 두 번째 선(y2
)은 초록색의 점선으로 동일하게 선의 두께를 조절합니다. 이러한 선 스타일과 두께의 조정은 그래프의 시각적 대비를 향상시켜 데이터의 패턴과 추세를 사용자에게 명확하게 전달해줍니다.
이처럼 마크와 라인 스타일링은 데이터의 성질과 중요한 특징을 강조하는 데 큰 역할을 합니다. 마크의 종류와 크기, 라인의 스타일과 두께를 조정함으로써 더욱 세련되고 쉽게 이해할 수 있는 그래프를 생성할 수 있습니다.
배경과 그리드
그리드 사용하기
그래프 내부에 그리드를 사용하면 데이터 포인트 간의 정확한 위치를 더 쉽게 확인할 수 있습니다. Matplotlib에서는 plt.grid()
함수를 사용하여 간단히 그리드를 추가할 수 있으며, 세부적인 스타일 조정이 가능합니다. 그러나 이 섹션에서는 seaborn을 함께 사용하여 그리드를 적용하는 방법에 초점을 둡니다. Seaborn은 matplotlib 위에 구축된 데이터 시각화 라이브러리로, 기본 설정에서 그리드가 포함된 아름다운 그래프 스타일을 제공합니다.
예시
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
# Seaborn 스타일 설정
sns.set(style="whitegrid")
# 임의의 데이터 생성
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 그래프 생성
plt.figure(figsize=(10,6))
plt.plot(x, y)
plt.title('Sin Wave with Seaborn Grid')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.show()
이 코드는 x축이 0에서 10 사이이고, y축이 sin
함수 값을 표시하는 그래프를 생성하며, seaborn의 whitegrid
스타일을 사용하여 그리드가 포함된 배경을 만듭니다.
배경 색과 투명도 조정
배경 색을 조정하려면 matplotlib의 figure()
함수에서 facecolor
파라미터를 사용합니다. 투명도 조정은 alpha
파라미터를 통해 가능합니다. 하지만, 일반적으로 그래프의 배경 색과 투명도는 저장될 때 보다 중요해지며, plt.savefig()
함수에서 해당 옵션을 지정할 수 있습니다.
예시: 배경 색 변경
plt.figure(figsize=(10, 6), facecolor='lightblue')
plt.plot(x, y)
plt.title('Sin Wave with Custom Background Color')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.show()
예시: 그래프 저장 시 투명도 조정
plt.figure(figsize=(10, 6))
plt.plot(x, y)
plt.title('Sin Wave')
plt.xlabel('X axis')
plt.ylabel('Y axis')
# 그래프를 저장할 때 배경을 투명하게 설정
plt.savefig('sin_wave.png', transparent=True)
이 예시에서는 하나의 sin 함수 그래프를 생성하고, 배경 색을 'lightblue'로 설정하여 그래프를 더 시각적으로 매력적으로 만들었습니다. 또한, 그래프를 파일로 저장할 때 transparent=True
옵션을 사용하여 배경을 투명하게 만들어, 다른 문서나 발표 자료에 삽입할 때 유용합니다.
이처럼 그리드 사용 및 배경 색과 투명도 조정은 데이터 시각화에서 중요한 역할을 하며, seaborn과 matplotlib의 다양한 옵션을 사용하여 그래프의 가독성과 미적 요소를 향상시킬 수 있습니다.