Matplotlib 히스토그램에서 각 막대(patch)의 정중앙에 눈금 레이블을 배치하려면, 먼저 각 patch의 중심 좌표를 계산한 뒤 xticks() 메서드를 사용해 눈금과 레이블을 해당 위치에 지정하면 됩니다.
구현 단계
figure 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
무작위 표준 정규 분포 샘플 데이터 x를 생성합니다.
bin(구간)의 개수를 저장할 변수를 초기화합니다.
hist() 메서드를 사용해 히스토그램을 그립니다.
각 patch의 중앙에 위치하는 tick 리스트를 계산합니다.
ticklabel 리스트를 생성합니다.
xticks() 메서드로 x축 눈금 위치와 레이블을 설정합니다.
figure를 화면에 표시하려면 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.random.randn(1000) n_bins = 10 n, bins, patches = plt.hist(x, bins=n_bins, edgecolor='black') ticks = [(patch._x0 + patch._x1)/2 for patch in patches] ticklabels = [i for i in range(n_bins)] plt.xticks(ticks, ticklabels) plt.show()
코드 설명
핵심은 ticks = [(patch._x0 + patch._x1)/2 for patch in patches] 부분입니다. hist() 메서드는 반환값으로 각 bin의 개수(n), bin 경계(bins), 그리고 막대 객체(patches)를 돌려줍니다. 각 patch 객체는 _x0(왼쪽 경계)와 _x1(오른쪽 경계) 속성을 가지므로, 두 값의 평균을 구하면 해당 막대의 중심 x 좌표를 얻을 수 있습니다.
이렇게 계산된 중심 좌표 리스트를 xticks()에 전달하고, 두 번째 인자로 0부터 n_bins-1까지의 정수 레이블 리스트를 넘기면, 기본적으로 막대 경계에 표시되던 눈금이 각 막대의 정중앙으로 이동하게 됩니다.
실행 결과

위 코드를 실행하면 x축 눈금 레이블(0~9)이 각 히스토그램 막대의 정중앙에 정렬되어 표시됩니다. 이 기법은 구간별 데이터 개수를 한눈에 파악하기 쉬운 가독성 높은 히스토그램을 만들 때 유용합니다.