Seaborn 분포 플롯(distribution plot)에서 곡선 아래 영역을 색으로 채우려면 distplot()과 fill_between() 메서드를 함께 사용하면 됩니다. distplot()으로 확률 밀도 곡선을 그린 뒤, 해당 곡선의 좌표 데이터를 추출하여 fill_between()으로 영역을 채우는 방식입니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
- 데이터 포인트로 이루어진 리스트를 생성합니다.
- 관측값의 단변량(univariate) 분포를 플롯합니다.
- 곡선 아래 영역을 채우기 위해 fill_between() 메서드를 사용합니다.
- x=0, y=0으로 자동 스케일링 마진(margins)을 설정합니다.
- show() 메서드를 호출하여 그림을 화면에 표시합니다.
예제 코드
import seaborn as sns
import scipy.stats as stats
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = [2.0, 7.5, 9.0, 8.5]
ax = sns.distplot(x, fit_kws={"color": "red"}, kde=False, fit=stats.gamma, hist=None, label="label 1")
l1 = ax.lines[0]
x1 = l1.get_xydata()[:, 0]
y1 = l1.get_xydata()[:, 1]
ax.fill_between(x1, y1, color="red", alpha=0.3)
ax.margins(x=0, y=0)
plt.show()
코드 설명
- sns.distplot(...): 히스토그램(hist=None) 없이 감마(gamma) 분포 피팅 곡선만 그립니다. fit_kws를 통해 곡선 색상을 빨간색으로 지정합니다.
- ax.lines[0]: 플롯에 그려진 첫 번째 선 객체를 가져옵니다.
- get_xydata(): 곡선을 구성하는 x, y 좌표 배열을 추출합니다.
- fill_between(x1, y1): 추출한 좌표를 기준으로 곡선 아래 영역을 빨간색(alpha=0.3)으로 반투명하게 채웁니다.
- ax.margins(x=0, y=0): 축 양 끝의 불필요한 여백을 제거하여 곡선이 축에 딱 맞게 표시되도록 합니다.
실행 결과


참고: distplot()은 Seaborn 최신 버전(v0.14 이상)에서 공식적으로 지원 중단(deprecated)되었습니다. 새 프로젝트에서는 sns.kdeplot(fill=True) 또는 sns.histplot(kde=True)을 사용하는 것이 좋으며, kdeplot의 경우 fill=True 옵션만으로 곡선 아래 영역을 간단히 채울 수 있습니다.