matplotlib으로 히스토그램을 그릴 때 plt.hist() 함수의 bins 매개변수는 정수, 배열, 문자열 등 다양한 형태로 지정할 수 있습니다. 값의 형태에 따라 히스토그램의 구간(bin)이 서로 다르게 해석되는데, 세 가지 방식을 한 화면에서 비교해 보려면 아래 단계를 따르면 됩니다.
구현 단계
그림(figure) 크기를 설정하고, 서브플롯 사이와 주변의 여백(padding)을 조정합니다.
히스토그램에 사용할 데이터 리스트를 준비합니다.
현재 그림에 nrows=1, ncols=3, index=1로 첫 번째 서브플롯을 추가합니다.
bins가 정수(number)인 경우의 히스토그램을 그립니다.
nrows=1, ncols=3, index=2로 두 번째 서브플롯을 추가합니다.
bins가 배열(array)인 경우의 히스토그램을 그립니다.
nrows=1, ncols=3, index=3으로 세 번째 서브플롯을 추가합니다.
bins가 문자열(string)인 경우의 히스토그램을 그립니다.
bins 형태별 해석 방식
정수: 데이터의 최솟값부터 최댓값까지의 범위를 지정한 개수만큼 균등한 폭의 구간으로 나눕니다. 예제에서는 데이터 길이(len(data))를 그대로 bin 개수로 사용했습니다.
배열: 배열의 각 요소가 bin의 경계값(edge)이 됩니다. 예제의 [1, 3, 5, 7]은 세 개의 구간 [1,3), [3,5), [5,7]을 만듭니다.
문자열: NumPy에서 제공하는 히스토그램 binning 알고리즘 이름을 의미합니다. 'auto', 'fd', 'scott', 'stone' 등을 지정하면 해당 알고리즘이 최적의 bin 경계를 자동으로 계산합니다.
예제 코드
import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True data = [1, 3, 1, 4, 7, 1, 3, 5, 4, 6, 5] # bins가 정수인 경우 plt.subplot(131) plt.hist(data, bins=len(data)) # bins가 배열인 경우 plt.subplot(132) plt.hist(data, bins=[1, 3, 5, 7]) # bins가 문자열인 경우 plt.subplot(133) plt.hist(data, bins='stone') plt.show()
출력 결과
코드를 실행하면 하나의 행에 세 개의 서브플롯이 나란히 배치됩니다. 왼쪽은 bin 개수를 직접 지정한 결과, 가운데는 경계값을 명시적으로 지정한 결과, 오른쪽은 'stone' 알고리즘이 자동으로 계산한 bin 구간을 보여줍니다. 이처럼 같은 데이터라도 bins의 지정 방식에 따라 히스토그램의 모양이 달라지므로, 데이터 분포를 효과적으로 시각화하려면 상황에 맞는 bins 형태를 선택하는 것이 중요합니다.