<* Matplotlib 박스 플롯 그리기 *>
◆ 박스 플롯(Box plot) 또는 박스-위스커 플롯 (Box-Whisker plot)은 수치 데이터를 표현하는 하나의 방식이다.
◆ 일반적으로 박스 플롯은 전체 데이터로부터 얻어진 아래의 다섯 가지 요약 수치를 사용해서 그려진다.
- 최소값
- 제 1사분위 수 (Q1)
- 제 2사분위 수 또는 중위수 (Q2)
- 제 3사분위 수 (Q3)
- 최대값
◆ 사분위 수는 데이터를 4등분한 지점을 의미한다.
예를 들어, 제 1사분위 수는 전체 데이터 중 하위 25%에 해당하는 값이고,
제 3사분위 수는 전체 데이터 중 상위 25%에 해당하는 값이다.
---< 예제 : Graph_boxplot.py 박스 플롯 그리기 >-----------------------
import matplotlib.pyplot as plt
import numpy as np
# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (4, 3)
plt.rcParams['font.size'] = 12
# 2. 데이터 준비
np.random.seed(0)
data_a = np.random.normal(0, 2.0, 1000)
data_b = np.random.normal(-3.0, 1.5, 500)
data_c = np.random.normal(1.2, 1.5, 1500)
# 3. 그래프 그리기
fig, ax = plt.subplots()
ax.boxplot([data_a, data_b, data_c])
ax.set_ylim(-10.0, 10.0)
ax.set_xlabel('Data Type')
ax.set_ylabel('Value')
plt.show()
________________________________________________________________________________________
▶ ax.boxplot()은 주어진 데이터 어레이로부터 얻어진 요약 수치를 박스 형태로 나타낸다.
▶ np.random 모듈의 normal() 함수는 정규 분포로부터 난수를 생성한다.
▶ 세 개의 난수 데이터 어레이를 리스트 형태로 입력했다.
▶ 가운데 박스 모양으로부터 그려지는 중심선을 수염(Whisker)이라고 한다.
---< 예제 : Graph_boxplot_notch.py 그래프 노치 표시하기 >-----------------------
import matplotlib.pyplot as plt
import numpy as np
# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (4, 3)
plt.rcParams['font.size'] = 12
# 2. 데이터 준비
np.random.seed(0)
data_a = np.random.normal(0, 2.0, 1000)
data_b = np.random.normal(-3.0, 1.5, 500)
data_c = np.random.normal(1.2, 1.5, 1500)
# 3. 그래프 그리기
fig, ax = plt.subplots()
ax.boxplot([data_a, data_b, data_c], notch=True, whis=2.5)
ax.set_ylim(-10.0, 10.0)
ax.set_xlabel('Data Type')
ax.set_ylabel('Value')
plt.show()
_________________________________________________________________________________________________
▶ ax.boxplot()의 notch 파라미터를 True로 지정하면 중앙값 (Median)의 95% 신뢰 구간을
노치 형태로 표시한 Notched Boxplot을 나타낸다.
▶ 예제에서는 whis=2.5로 지정해서, 수염의 길이가 길어지고 수염 범위 밖의 데이터가 표시되지 않는다.
---< 예제 : Graph_medians.py 분위수 값, 중앙값 등 얻기 >------------------------
import matplotlib.pyplot as plt
import numpy as np
# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (4, 3)
plt.rcParams['font.size'] = 12
# 2. 데이터 준비
np.random.seed(0)
data_a = np.random.normal(0, 2.0, 1000)
data_b = np.random.normal(-3.0, 1.5, 500)
data_c = np.random.normal(1.2, 1.5, 1500)
# 3. 그래프 그리기
fig, ax = plt.subplots()
box = ax.boxplot([data_a, data_b, data_c], notch=True, whis=1.5)
ax.set_ylim(-10.0, 10.0)
ax.set_xlabel('Data Type')
ax.set_ylabel('Value')
whiskers = [item.get_ydata() for item in box['whiskers']]
medians = [item.get_ydata() for item in box['medians']]
fliers = [item.get_ydata() for item in box['fliers']]
print('whiskers:', whiskers)
print('medians:', medians)
print('fliers:', fliers)
plt.show()
_____________________________________________________________________________________________
▶ ax.boxplot()은 박스 플롯의 각 구성 요소에 해당하는 Line2D 인스턴스의 리스트를 딕셔너리의 형태로 반환한다.
▶ 예를 들어,
예제에서 box[‘whiskers’]는 Q1, Q3, max, min 값, box[‘medians’]는 중앙값에 대한 정보를 갖는 Line2D 인스턴스의 리스트이다.
▶ box[‘fliers’]는 수염 범위 밖의 데이터 포인트를 반환하는데, (각 데이터셋에 해당하는) 세 개의 어레이를 갖는 리스트가 출력되었다.
---< 예제 : Graph_boxplot-vert..py 수평 박스 플롯 나타내기 >----------------------------
import matplotlib.pyplot as plt
import numpy as np
# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (4, 3)
plt.rcParams['font.size'] = 12
# 2. 데이터 준비
np.random.seed(0)
data_a = np.random.normal(0, 2.0, 1000)
data_b = np.random.normal(-3.0, 1.5, 500)
data_c = np.random.normal(1.2, 1.5, 1500)
# 3. 그래프 그리기
fig, ax = plt.subplots()
ax.boxplot([data_a, data_b, data_c], notch=True, whis=2.5, vert=False)
ax.set_xlim(-10.0, 10.0)
ax.set_xlabel('Value')
ax.set_ylabel('Data Type')
plt.show()
___________________________________________________________________________________________________________
▶ ax.boxplot()의 vert 파라미터를 False로 지정하면 수평 방향의 박스 플롯이 나타난다.
▶ 디폴트는 수직 방향의 박스 플롯이다.