오랜만입니다. 안녕하세요~ 꽁냥이에요.
데이터의 범위가 천차만별일 때 즉, 최소값은 1인데 최대값이 10000이라면 축이 엄청 늘어나기 때문에 그래프 가독성이 떨어질 수 있습니다.
이때 로그 눈금을 사용하면 어느 정도 축이 늘어나는 것을 방지하고 그래프의 가독성을 높일 수 있습니다. Matplotlib에서는 로그 눈금을 사용할 수 있는 기능을 제공하고 있는데요. 이번 포스팅에서는 로그 눈금(log scale)로 축을 설정하는 방법에 대해 알아보겠습니다.
Matplotlib 로그 눈금 설정
먼저 다음의 샘플 데이터가 있다고 해볼게요.
value = [1, 10, 100, 1000, 1000000]
먼저 로그 눈금을 사용하지 않고 라인 차트를 그린다면 어떻게 되는지 살펴보겠습니다.
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')
plt.plot(range(len(value)), value)
plt.show()
데이터 값 100000을 제외한 다른 값들은 차이가 없어보이네요. 실제로 1, 10, 100, 1000 값들은 비율로 따지자면 엄청난 차이를 갖고 있는데 말이지요(예 10은 1의 열 배, 1000은 100의 열 배 등).
이제 y축에 로그 눈금(Log Scale)을 적용하여 그래프를 그려보겠습니다. 로그 눈금은 plt.yscale 첫번째 인자에 'log' 그리고 base 인자에 '밑'을 지정합니다. 꽁냥이는 상용로그를 적용하기 위하여 base를 10으로 했습니다.
fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')
plt.plot(range(len(value)), value)
plt.yscale('log', base=10)
plt.show()
로그 눈금으로 보니 차이가 없었던 데이터까지 확연하게 차이가 보입니다.
plt.yscale 이외에도 plt.semilogy를 이용해도 됩니다.
fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')
plt.plot(range(len(value)), value)
plt.semilogy(base=10)
plt.show()
plt.yscale과 plt.semilogy의 차이점은 plt.yscale은 로그 눈금 이외에도 다양한 함수 스케일을 적용할 수 있지만 plt.semilogy은 로그 눈금만을 위한 함수라는 점입니다.
y축만 로그 눈금을 사용할 수 있는 것은 당연히 아닙니다. plt.xscale 또는 plt.semilogx를 이용하면 x 축에서도 로그 눈금을 사용할 수 있습니다.
오늘은 축의 눈금을 로그 눈금으로 바꾸는 방법에 대해서 살펴보았습니다. Matplotlib 문서를 보는데 생각보다 훨씬 더 많은 기능을 제공하는 것 같습니다. 또 흥미로운 내용이 있으면 포스팅하겠습니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다. 안녕히 계세요.
댓글