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

Matplotlib에서 두 개의 히스토그램을 동일한 빈(bin) 너비로 그리는 방법

두 개의 히스토그램을 서로 비교할 때, 각각 다른 빈(bin) 구간을 사용하면 시각적으로 왜곡된 결과를 얻을 수 있습니다. 이 문제를 해결하려면 두 데이터 집합을 하나로 합쳐서 공통의 빈 경계값을 먼저 계산한 뒤, 그 값을 두 히스토그램에 모두 적용하면 됩니다.

구현 단계

  • 난수 데이터 a와 정규분포 데이터 b를 생성합니다.

  • 동일한 빈 너비를 위해 사용할 변수 bins를 초기화합니다.

  • 두 데이터를 수평으로 결합한 뒤 np.histogram()으로 전체 범위에 대한 빈 경계값을 계산합니다.

  • 계산된 빈 경계값을 사용해 ab를 각각 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' 옵션을 추가하면 막대마다 검은색 테두리가 생겨 두 히스토그램이 겹쳐 있어도 각 막대를 명확하게 구분할 수 있습니다.

실행 결과

코드를 실행하면 두 데이터 집합이 동일한 빈 구간 위에 겹쳐진 히스토그램이 출력되어, 분포의 차이를 직관적으로 비교할 수 있습니다.