Matplotlib에서는 yscale() 함수에 스케일 이름을 문자열로 전달하기만 하면 Y축의 눈금 방식을 손쉽게 변경할 수 있습니다. 대표적인 스케일로는 linear(선형), log(로그), logit(로짓), symlog(대칭 로그) 네 가지가 있으며, 하나의 figure에 서브플롯을 나눠 각 스케일의 차이를 한눈에 비교할 수 있습니다.
구현 단계
- figure 크기 설정: rcParams로 그림 크기를 지정하고, 서브플롯 사이와 주변의 여백(패딩)을 자동으로 조정합니다.
- y 데이터 생성: NumPy의 정규분포 난수를 이용해 0과 1 사이의 y 데이터 포인트를 만들고 정렬합니다.
- x 데이터 생성: y 데이터 길이만큼의 연속된 정수 배열을 x 값으로 사용합니다.
- 서브플롯 추가: subplot() 메서드로 현재 figure의 원하는 위치(인덱스)에 서브플롯을 추가합니다.
- 데이터 플로팅: plot() 메서드로 x, y 데이터 포인트를 그립니다.
- 스케일 적용: yscale("linear")처럼 클래스 이름을 문자열로 전달해 해당 스케일을 적용합니다.
- 제목 설정 및 반복: 현재 서브플롯의 제목을 지정한 뒤, 나머지 세 개의 서브플롯에 대해 인덱스·yscale() 클래스 이름·제목만 바꿔 같은 과정을 반복합니다.
- 그래프 출력: show() 메서드로 완성된 그림을 화면에 표시합니다.
예제 코드
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))
# linear
plt.subplot(221)
plt.plot(x, y)
plt.yscale('linear')
plt.title('linear')
# log
plt.subplot(222)
plt.plot(x, y)
plt.yscale('log')
plt.title('log')
# symmetric log
plt.subplot(223)
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthreshy=0.01)
plt.title('symlog')
# logit
plt.subplot(224)
plt.plot(x, y)
plt.yscale('logit')
plt.title('logit')
plt.show()
실행 결과

각 스케일의 특징
- linear: 가장 기본적인 선형 스케일로, 데이터 값의 변화가 눈금에 비례해 표시됩니다.
- log: 로그 스케일로, 값의 크기 차이가 매우 클 때 유용하며 양수 값만 표현할 수 있습니다.
- symlog: 대칭 로그 스케일로, 음수와 양수를 모두 로그처럼 표현합니다. linthreshy 매개변수로 로그 변환이 시작되는 선형 구간의 임계값을 지정할 수 있습니다.
- logit: 로짓 스케일로, 0과 1 사이의 확률 값을 표현하는 데 특히 적합합니다.