Matplotlib으로 히스토그램을 그릴 때 각 막대(bar)에 서로 다른 색상을 적용하면 시각적으로 더욱 돋보이는 그래프를 만들 수 있습니다. 이 글에서는 난수 데이터로 생성한 히스토그램의 각 막대에 무작위 색상을 지정하는 방법을 단계별로 살펴봅니다.
구현 단계
plt.rcParams를 사용해 그림(figure) 크기를 설정하고, 서브플롯 주변의 여백(padding)을 자동으로 조정합니다.
plt.subplots()로 하나의 그림과 서브플롯 축(ax)을 생성합니다.
numpy의 np.random.rand()로 100개의 샘플 데이터를 만들어 히스토그램을 그립니다.
ax.hist()는 N(각 구간의 개수), bins(구간 경계), patches(막대 객체)를 반환하므로, 이를 활용해 막대별 색상을 변경할 수 있습니다.
구간(bin) 개수만큼 반복하면서 각 막대(patch)에 set_facecolor() 메서드로 무작위 색상 코드를 지정합니다.
마지막으로 plt.show()를 호출해 그래프를 화면에 출력합니다.
예제 코드
import numpy as np
import matplotlib.pyplot as plt
import random
import string
# 그림 크기 설정
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
# 그림과 서브플롯 생성
fig, ax = plt.subplots()
# 무작위 데이터 생성
data = np.random.rand(100)
# 무작위 데이터로 히스토그램 그리기
N, bins, patches = ax.hist(data, edgecolor='black', linewidth=1)
# 각 막대에 무작위 면 색상(facecolor) 지정
for i in range(len(N)):
patches[i].set_facecolor("#" + ''.join(random.choices("ABCDEF" + string.digits, k=6)))
# 그래프 출력
plt.show()코드 설명
핵심은 ax.hist()의 반환값 중 세 번째 요소인 patches입니다. patches는 히스토그램의 각 막대를 나타내는 Rectangle 객체의 리스트로, 이 객체들에 접근하면 개별 막대의 속성을 자유롭게 수정할 수 있습니다.
색상은 '#' + 16진수 6자리 형태의 HEX 코드로 생성됩니다. random.choices()에 'ABCDEF'와 숫자 문자열(string.digits)을 전달하고 k=6으로 지정하면 유효한 HEX 색상 코드가 무작위로 만들어집니다.
실행 결과
위 코드를 실행하면 검은색 테두리를 가진 막대들이 각각 서로 다른 무작위 색상으로 채워진 히스토그램이 출력됩니다.
응용 팁
무작위 색상 대신 미리 정의된 컬러 팔레트를 사용하고 싶다면 matplotlib.cm 모듈의 컬러맵(colormap)을 활용할 수 있습니다. 예를 들어 값이 큰 구간일수록 진한 색상이 적용되도록 하면 데이터의 분포를 직관적으로 표현할 수 있습니다.