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

Seaborn 분포 플롯에서 곡선 아래 영역을 채우는 방법

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): 축 양 끝의 불필요한 여백을 제거하여 곡선이 축에 딱 맞게 표시되도록 합니다.

실행 결과

Seaborn 분포 플롯에서 곡선 아래 영역을 채우는 방법Seaborn 분포 플롯에서 곡선 아래 영역을 채우는 방법

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