Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib 히스토그램에서 X축 레이블을 막대 중앙에 배치하는 방법

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까지의 정수 레이블 리스트를 넘기면, 기본적으로 막대 경계에 표시되던 눈금이 각 막대의 정중앙으로 이동하게 됩니다.

실행 결과

Matplotlib 히스토그램에서 X축 레이블을 막대 중앙에 배치하는 방법

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