두 개의 히스토그램을 서로 비교할 때, 각각 다른 빈(bin) 구간을 사용하면 시각적으로 왜곡된 결과를 얻을 수 있습니다. 이 문제를 해결하려면 두 데이터 집합을 하나로 합쳐서 공통의 빈 경계값을 먼저 계산한 뒤, 그 값을 두 히스토그램에 모두 적용하면 됩니다.
구현 단계
난수 데이터 a와 정규분포 데이터 b를 생성합니다.
동일한 빈 너비를 위해 사용할 변수 bins를 초기화합니다.
두 데이터를 수평으로 결합한 뒤 np.histogram()으로 전체 범위에 대한 빈 경계값을 계산합니다.
계산된 빈 경계값을 사용해 a와 b를 각각 hist() 메서드로 그립니다.
show() 메서드로 그래프를 화면에 표시합니다.
예제 코드
import numpy as np from matplotlib import pyplot as plt plt.rcParams["figure.figsize"] = [7.00, 3.50] plt.rcParams["figure.autolayout"] = True a = np.random.random(100) * 0.5 b = 1 - np.random.normal(size=100) * 0.1 bins = 10 bins = np.histogram(np.hstack((a, b)), bins=bins)[1] plt.hist(a, bins, edgecolor='black') plt.hist(b, bins, edgecolor='black') plt.show()
핵심 포인트
여기서 가장 중요한 부분은 np.hstack((a, b))으로 두 데이터 배열을 하나로 합친 후, np.histogram()의 반환값 중 두 번째 요소(빈 경계 배열)를 추출하는 것입니다. 이렇게 하면 두 데이터의 전체 값 범위를 균등하게 나누는 공통 빈 경계가 만들어지며, 이를 plt.hist()에 전달함으로써 두 히스토그램이 정확히 같은 빈 너비를 갖게 됩니다.
또한 edgecolor='black' 옵션을 추가하면 막대마다 검은색 테두리가 생겨 두 히스토그램이 겹쳐 있어도 각 막대를 명확하게 구분할 수 있습니다.
실행 결과
코드를 실행하면 두 데이터 집합이 동일한 빈 구간 위에 겹쳐진 히스토그램이 출력되어, 분포의 차이를 직관적으로 비교할 수 있습니다.