Matplotlib에서 그래프를 그리다 보면 x축이나 y축 눈금에 소수점 아래 불필요한 숫자가 함께 표시되어 가독성이 떨어지는 경우가 있습니다. 이럴 때 축 눈금을 정수 형태로만 깔끔하게 표시하는 방법을 알아보겠습니다.
해결 절차
- 그림(figure) 크기를 설정하고 서브플롯(subplot) 주변 및 사이의 여백(padding)을 조정합니다.
- NumPy를 사용하여 x, y 데이터 포인트를 생성합니다.
- figure와 subplot 집합을 생성합니다.
- x축 눈금 레이블(xtick labels)을 정수로만 표시하기 위해 x.astype(int) 메서드를 사용합니다.
- show() 메서드를 호출하여 그래프를 화면에 출력합니다.
예제 코드
import matplotlib.pyplot as plt import numpy as np plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True x = np.array([1.110, 2.110, 4.110, 5.901, 6.00, 7.90, 8.90]) y = np.array([2.110, 1.110, 3.110, 9.00, 4.001, 2.095, 5.890]) fig, ax = plt.subplots() ax.plot(x, y) ax.set_xticklabels(x.astype(int)) plt.show()
코드 설명
핵심은 set_xticklabels() 함수입니다. NumPy 배열에 astype(int)를 적용하면 각 요소의 소수점 이하 값이 버려지고 정수로 변환됩니다. 예를 들어 1.110은 1로, 5.901은 5로 변환됩니다. 이렇게 변환된 정수 배열을 x축 눈금 레이블로 지정하면, 축에는 소수점 없이 정수만 표시됩니다.
또한 plt.rcParams["figure.figsize"]로 그림 크기를 지정하고, figure.autolayout 옵션을 True로 설정하면 레이블이 잘리지 않도록 여백이 자동으로 조절됩니다.
참고 사항
눈금 개수와 데이터 포인트 개수가 일치하지 않으면 경고가 발생할 수 있습니다. 이 경우 ax.set_xticks(x)를 먼저 호출한 후 레이블을 지정하거나, matplotlib.ticker.FormatStrFormatter('%d') 또는 FuncFormatter를 사용하는 방법도 좋은 대안입니다. 특히 데이터 범위가 넓어 눈금이 자동으로 재조정되는 상황에서는 Formatter 방식이 더 안정적입니다.