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

Python Matplotlib 히스토그램에서 막대마다 다른 색상 지정하는 방법

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)을 활용할 수 있습니다. 예를 들어 값이 큰 구간일수록 진한 색상이 적용되도록 하면 데이터의 분포를 직관적으로 표현할 수 있습니다.