Matplotlib에서 누적 분포 함수(CDF, Cumulative Distribution Function)를 로그 스케일로 시각화하려면, 샘플 데이터를 정렬한 후 누적 확률 값을 계산하고 x축과 y축을 각각 로그 스케일로 설정하면 됩니다. 아래에서 단계별로 자세히 살펴보겠습니다.
구현 단계
- figure 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
- 샘플 데이터의 개수를 나타내는 변수 N을 초기화합니다.
- numpy를 사용하여 데이터와 누적 분포 값(X2, F2)을 생성합니다.
- plot() 메서드로 X2와 F2를 그립니다.
- x축과 y축을 모두 로그 스케일로 변경합니다.
- show() 메서드로 그래프를 화면에 표시합니다.
예제 코드
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
N = 100
data = np.random.randn(N)
X2 = np.sort(data)
F2 = np.array(range(N))/float(N)
plt.plot(X2, F2)
plt.xscale('log')
plt.yscale('log')
plt.show()
코드 설명
np.random.randn(N)은 평균이 0이고 표준편차가 1인 표준 정규분포를 따르는 난수 100개를 생성합니다. 이 데이터를 np.sort()로 오름차순 정렬하여 X2에 저장하고, 각 데이터 포인트의 순위를 전체 개수로 나눈 값(F2)을 경험적 누적 분포 값으로 사용합니다. 마지막으로 plt.xscale('log')와 plt.yscale('log')를 호출해 두 축을 로그 스케일로 변환하면, 넓은 범위의 값을 한눈에 비교하기 쉬운 로그-로그 플롭이 완성됩니다.
실행 결과
위 코드를 실행하면 정규분포 난수에 대한 누적 분포 곡선이 x축과 y축 모두 로그 스케일로 표시된 그래프가 출력됩니다. 로그 스케일을 적용하면 데이터가 여러 자릿수(order of magnitude)에 걸쳐 분포할 때도 패턴을 명확하게 확인할 수 있습니다.