Matplotlib를 사용하면 로그 스케일(log scale)이 적용된 축에서도 두 곡선 사이의 영역을 손쉽게 색으로 채울 수 있습니다. 이 글에서는 fill_between() 함수와 xscale(), yscale() 메서드를 활용해 로그 스케일로 곡선 아래 영역을 채우는 방법을 단계별로 살펴보겠습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
- NumPy를 사용해 x, y1, y2 데이터 포인트를 생성합니다.
- plot() 메서드로 x, y1, y2 데이터를 그립니다.
- fill_between() 함수로 두 곡선 사이의 영역을 채웁니다.
- xscale()과 yscale() 메서드로 축의 스케일을 로그로 설정합니다.
- legend() 메서드로 그래프에 범례를 배치합니다.
- show() 메서드로 그림을 화면에 출력합니다.
예제 코드
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(-1, 1, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label="y=sin(x)")
plt.plot(x, y2, label="y=cos(x)")
plt.fill_between(x, y1, y2, color="red", label="Area", alpha=0.3)
plt.xscale('log')
plt.yscale('log')
plt.legend(loc='lower right')
plt.show()참고 사항
로그 스케일은 양수 값만 표현할 수 있으므로, 위 예제처럼 데이터 범위에 음수가 포함된 경우 해당 구간은 그래프에 나타나지 않습니다. 따라서 로그 스케일 그래프를 작성할 때는 데이터가 양수 범위에 있도록 범위를 조정하는 것이 좋습니다. 예를 들어 np.linspace(0.1, 10, 100)처럼 양수 구간으로 설정하면 전체 곡선과 채워진 영역을 확인할 수 있습니다.
실행 결과
