박스 플롯 사용자 정의

Beginner

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

소개

이 튜토리얼에서는 Matplotlib 에서 박스 플롯 (box plot) 을 사용자 정의하는 방법을 배웁니다. 박스 플롯은 데이터 세트의 분포를 시각화하는 데 널리 사용되는 방법입니다. 박스 앤 위스커 플롯 (box-and-whisker plot) 이라고도 하며, 데이터의 중앙값, 사분위수 및 이상치를 보여줍니다. Matplotlib 을 사용하여 박스 플롯을 사용자 정의하는 방법을 배우기 위해 다양한 예제를 살펴볼 것입니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접근하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 즉시 해결해 드리겠습니다.

필요한 라이브러리 가져오기

Matplotlib 과 NumPy 와 같은 필요한 라이브러리를 먼저 가져오는 것으로 시작합니다. 또한 결과의 재현성을 보장하기 위해 NumPy 에 대한 랜덤 시드 (random seed) 를 설정합니다.

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(19680801)

데이터 생성

예제에 사용할 임의의 데이터를 생성합니다. NumPy 함수 random.lognormal()을 사용하여 평균 1.5, 표준 편차 1.75 인 로그 정규 분포 (log-normal distribution) 데이터를 생성합니다. 4 개의 변수에 대해 37 개의 샘플을 생성하고, 이를 data 변수에 저장합니다. 또한 각 변수에 대한 레이블 목록을 생성합니다.

data = np.random.lognormal(size=(37, 4), mean=1.5, sigma=1.75)
labels = list('ABCD')

기본 박스 플롯 (Box Plot)

데이터를 시각화하기 위해 기본 박스 플롯을 생성하는 것으로 시작합니다. Matplotlib 함수 boxplot()을 사용하고 데이터와 레이블을 인수로 전달합니다. 또한 set_title() 함수를 사용하여 플롯의 제목을 설정합니다.

fig, ax = plt.subplots()
ax.boxplot(data, labels=labels)
ax.set_title('Default Box Plot')
plt.show()

개별 구성 요소 제거

boxplot() 함수에서 사용할 수 있는 다양한 키워드 인수를 사용하여 박스 플롯의 개별 구성 요소를 제거할 수 있습니다. 예를 들어, showmeans를 False 로 설정하여 평균을 제거할 수 있습니다. 또한 showboxshowcaps를 각각 False 로 설정하여 박스와 수염 (whiskers) 을 제거할 수도 있습니다.

fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(8, 8), sharey=True)
axs[0, 0].boxplot(data, labels=labels)
axs[0, 0].set_title('Default')

axs[0, 1].boxplot(data, labels=labels, showmeans=False)
axs[0, 1].set_title('No Means')

axs[1, 0].boxplot(data, labels=labels, showbox=False, showcaps=False)
axs[1, 0].set_title('No Box or Whiskers')

axs[1, 1].boxplot(data, labels=labels, showfliers=False)
axs[1, 1].set_title('No Outliers')

plt.show()

박스 플롯 스타일 사용자 정의

boxplot() 함수에서 사용할 수 있는 다양한 키워드 인수를 사용하여 박스 플롯의 스타일을 사용자 정의할 수도 있습니다. 예를 들어, boxprops를 설정하여 박스의 색상과 선 스타일을 변경할 수 있습니다. 또한 medianprops, meanprops, meanlineprops를 각각 설정하여 중앙값 (median), 평균 (mean), 평균선 (mean line) 의 스타일을 변경할 수 있습니다.

fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(8, 8), sharey=True)
axs[0, 0].boxplot(data, labels=labels)
axs[0, 0].set_title('Default')

boxprops = dict(linestyle='--', linewidth=2, color='red')
axs[0, 1].boxplot(data, labels=labels, boxprops=boxprops)
axs[0, 1].set_title('Custom Box')

medianprops = dict(linestyle='-', linewidth=2, color='blue')
meanprops = dict(marker='D', markeredgecolor='black', markerfacecolor='green')
meanlineprops = dict(linestyle='--', linewidth=2, color='red')
axs[1, 0].boxplot(data, labels=labels, medianprops=medianprops, meanprops=meanprops, meanline=True, meanlineprops=meanlineprops)
axs[1, 0].set_title('Custom Median, Mean, and Mean Line')

flierprops = dict(marker='o', markerfacecolor='red', markersize=8, markeredgecolor='none')
axs[1, 1].boxplot(data, labels=labels, flierprops=flierprops)
axs[1, 1].set_title('Custom Outliers')

plt.show()

요약

박스 플롯은 데이터 세트의 분포를 시각화하는 훌륭한 방법입니다. Matplotlib 은 개별 구성 요소 제거 및 구성 요소 스타일 사용자 정의와 같은 박스 플롯에 대한 많은 사용자 정의 옵션을 제공합니다. 이러한 옵션을 사용하여 전달하려는 정보를 효과적으로 전달하는 박스 플롯을 만들 수 있습니다.