Matplotlib에서 박스플롯 위에 개별 데이터 점들의 분포(산점도)를 함께 표시하면 데이터의 실제 분포를 한눈에 파악할 수 있습니다. 이를 위해 boxplot() 메서드로 박스플롯을 그린 뒤, Pandas 데이터프레임을 enumerate로 순회하면서 각 열의 x, y 좌표를 추출하고 scatter()로 점들을 겹쳐 그릴 수 있습니다.
구현 단계
그림(figure) 크기를 설정하고, 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
DataFrame 클래스를 사용해 Box1, Box2 두 개의 키(열)를 가진 데이터프레임을 생성합니다.
데이터프레임으로부터 박스플롯을 그립니다.
데이터를 이용해 산점도에 사용할 x와 y 값을 계산합니다. 이때 x 값은 np.random.normal()에 작은 표준편차(예: 0.04)를 적용해 지터(jitter)를 주면, 같은 위치에 점들이 겹치는 것을 방지할 수 있습니다.
그림을 화면에 표시하려면 show() 메서드를 호출합니다.
예제 코드
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
data = pd.DataFrame({"Box1": np.random.rand(10), "Box2": np.random.rand(10)})
data.boxplot()
for i, d in enumerate(data):
y = data[d]
x = np.random.normal(i + 1, 0.04, len(y))
plt.scatter(x, y)
plt.show()실행 결과
