Matplotlib에서 0 값을 포함하는 데이터를 로그 스케일로 플롯하려면 xscale()과 yscale() 메서드에 "symlog"(대칭 로그) 스케일을 지정하면 됩니다.
일반적인 'log' 스케일은 log(0)가 수학적으로 정의되지 않기 때문에 0 값이 있는 데이터를 처리할 수 없습니다. 반면 symlog 스케일은 0 근처에서는 선형 스케일로 동작하고, 일정 임계값을 벗어나면 로그 스케일로 전환되므로 0뿐 아니라 음수 값도 문제없이 표현할 수 있습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
- plot() 메서드를 사용해 0 값을 포함하는 두 개의 리스트를 플롯합니다.
- yscale() 메서드에 "symlog" 스케일을 지정합니다.
- xscale() 메서드에 "symlog" 스케일을 지정합니다.
- 그림을 화면에 표시하려면 show() 메서드를 호출합니다.
예제 코드
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
plt.plot([0, 1, 2, 0, 3], [1, 0, 2, 3, 5], marker='o', linestyle='-')
plt.yscale('symlog')
plt.xscale('symlog')
plt.show()
실행 결과

참고: linthresh 파라미터 활용
0 주변에서 선형 스케일로 유지할 범위를 직접 조절하고 싶다면 linthresh 파라미터를 사용할 수 있습니다. 예를 들어 plt.xscale('symlog', linthresh=1)처럼 지정하면 -1부터 1 사이 구간은 선형으로, 그 이상의 영역은 로그 스케일로 렌더링됩니다. 데이터의 분포 특성에 맞게 이 값을 조정하면 더욱 가독성 높은 그래프를 얻을 수 있습니다.