러그 플롯(Rug Plot)은 데이터의 분포를 시각화하는 데 사용되는 그래프입니다. 하나의 변수에 대한 데이터를 축을 따라 짧은 눈금(마크) 형태로 표시하며, 모양이 카펫 가장자리의 술과 비슷하다고 해서 이러한 이름이 붙었습니다. 개별 데이터 포인트가 어디에 몰려 있는지 직관적으로 확인할 수 있어, 밀도 곡선과 함께 자주 활용됩니다.
Matplotlib에서 러그 플롯을 만들려면 아래 단계를 따르면 됩니다.
러그 플롯 생성 단계
- 그림 크기 설정 – figure 크기를 지정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
- x 데이터 생성 – numpy를 사용하여 x 데이터 포인트를 만듭니다.
- 커널 밀도 추정(KDE) 정의 – 가우시안 커널을 이용한 밀도 추정 객체 kde1과 kde2를 생성합니다.
- figure 생성 – figure() 메서드로 새 그림을 만들거나 기존 그림을 활성화합니다.
- 서브플롯 추가 – 서브플롯 구성의 일부로 'ax1'을 그림에 추가합니다.
- 러그 플롯 그리기 – marker_size=20 옵션으로 축 위에 데이터 눈금을 표시합니다.
- KDE 곡선 시각화 – plot() 메서드로 x_eval, kde1(x_eval), kde2(x_eval) 데이터를 그립니다.
- 범례 추가 – legend() 메서드로 그래프에 범례를 배치합니다.
- 결과 표시 – show() 메서드로 그림을 화면에 출력합니다.
예제 코드
import numpy as np from scipy import stats import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = [7.00, 3.50] plt.rcParams["figure.autolayout"] = True x = np.array([-6, -4, 2, 1, 4], dtype=float) kde1 = stats.gaussian_kde(x) kde2 = stats.gaussian_kde(x, bw_method='silverman') fig = plt.figure() ax = fig.add_subplot(111) ax.plot(x, np.zeros(x.shape), 'b+', ms=20) x_eval = np.linspace(-5, 5, num=10) ax.plot(x_eval, kde1(x_eval), 'k-', label="Scott's Rule") ax.plot(x_eval, kde2(x_eval), 'r-', label="Silverman's Rule") plt.legend(loc='upper right') plt.show()
참고: NumPy 1.24 버전부터는 np.float가 제거되었으므로, 위 코드처럼 파이썬 기본 타입인 float를 사용하는 것이 좋습니다.
출력 결과
위 코드를 실행하면 다음과 같은 그래프가 생성됩니다. 파란색 + 기호는 각 데이터 포인트의 위치를 나타내는 러그 플롯이며, 검은색 선은 스콧 규칙(Scott's Rule) 기반의 KDE 곡선, 빨간색 선은 실버먼 규칙(Silverman's Rule) 기반의 KDE 곡선입니다. 두 대역폭 추정 방식에 따라 밀도 곡선의 매끄러움이 어떻게 달라지는지 비교해 볼 수 있습니다.

