Matplotlib에서 생성한 상자 그림(Boxplot)은 수염(whiskers), 이상치(fliers), 캡(caps), 박스(boxes), 중앙값(medians) 등 여러 구성 요소로 이루어져 있습니다. Seaborn 스타일의 상자 그림에서 이러한 요소들의 데이터를 추출하고 속성을 편집하려면 다음 단계를 따르면 됩니다.
단계별 절차
- 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
- Pandas를 사용하여 데이터프레임(DataFrame)을 생성합니다.
- 데이터프레임의 열(column)을 기반으로 상자 그림을 만듭니다.
- 상자 그림의 이상치(outliers), 박스(boxes), 중앙값(medians), 수염(whiskers) 데이터를 가져옵니다.
- 가져온 모든 데이터를 출력하여 확인합니다.
- 그림을 화면에 표시하려면 show() 메서드를 사용합니다.
예제 코드
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
df = pd.DataFrame(dict(age=[23, 45, 21, 15, 12]))
_, bp = pd.DataFrame.boxplot(df, return_type='both')
outliers = [flier.get_ydata() for flier in bp["fliers"]]
boxes = [box.get_ydata() for box in bp["boxes"]]
medians = [median.get_ydata() for median in bp["medians"]]
whiskers = [whiskers.get_ydata() for whiskers in bp["whiskers"]]
print("Outliers/Fliers: ", outliers)
print("Boxes: ", boxes)
print("Medians: ", medians)
print("Whiskers: ", whiskers)
plt.show()실행 결과
Outliers/Fliers: [array([45])] Boxes: [array([15., 15., 23., 23., 15.])] Medians: [array([21., 21.])] Whiskers: [array([15., 12.]), array([23., 23.])]
코드 설명
위 예제에서는 pd.DataFrame.boxplot() 함수에 return_type='both' 옵션을 지정하여 축(Axes) 객체와 상자 그림의 각 구성 요소 딕셔너리를 동시에 반환받습니다. 반환된 딕셔너리에는 다음과 같은 키가 포함되어 있습니다.
- fliers: 박스 범위를 벗어나는 이상치(outlier) 데이터
- boxes: 사분위수 범위(IQR)를 나타내는 박스의 y축 데이터
- medians: 박스 중앙에 표시되는 중앙값(median) 선
- whiskers: 박스에서 최솟값·최댓값까지 뻗어 있는 수염 선
각 요소는 Matplotlib의 아티스트(Artist) 객체이므로 get_ydata() 메서드로 실제 좌표 값을 확인할 수 있으며, 반대로 set_* 계열 메서드나 속성 설정을 통해 색상, 선 두께, 마커 스타일 등을 자유롭게 편집할 수 있습니다.