Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib로 박스플롯(Boxplot)에 산점도(점 분포) 겹쳐 그리기

Matplotlib에서 박스플롯 위에 개별 데이터 점들의 분포(산점도)를 함께 표시하면 데이터의 실제 분포를 한눈에 파악할 수 있습니다. 이를 위해 boxplot() 메서드로 박스플롯을 그린 뒤, Pandas 데이터프레임을 enumerate로 순회하면서 각 열의 x, y 좌표를 추출하고 scatter()로 점들을 겹쳐 그릴 수 있습니다.

구현 단계

  • 그림(figure) 크기를 설정하고, 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.

  • DataFrame 클래스를 사용해 Box1, Box2 두 개의 키(열)를 가진 데이터프레임을 생성합니다.

  • 데이터프레임으로부터 박스플롯을 그립니다.

  • 데이터를 이용해 산점도에 사용할 xy 값을 계산합니다. 이때 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()

실행 결과

Matplotlib로 박스플롯(Boxplot)에 산점도(점 분포) 겹쳐 그리기