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

Pandas와 Matplotlib로 해치(Hatch) 패턴이 적용된 막대 그래프 그리기

Pandas 데이터프레임으로 생성한 막대 그래프에 해치(hatch) 패턴을 적용하면, 색상만으로 구분하기 어려운 데이터를 시각적으로 더 명확하게 표현할 수 있습니다. 이 글에서는 Pandas와 Matplotlib를 활용해 해치 패턴이 들어간 막대 그래프를 그리는 방법을 단계별로 살펴보겠습니다.

구현 단계

  • 그림 크기 설정plt.rcParams를 사용해 figure 크기를 지정하고, 서브플롯 주변과 사이의 여백(padding)을 자동으로 조정합니다.
  • 데이터프레임 생성 — Pandas를 이용해 두 개의 열(column)을 가진 데이터프레임을 만듭니다.
  • 추가(axes) 생성 — 현재 figure에 서브플롯 형태로 새로운 축을 추가합니다.
  • 막대 그래프 그리기plot() 메서드에 kind='bar' 옵션을 지정하여 막대 그래프를 생성합니다.
  • 해치 목록 정의 — 사용할 해치 패턴 문자(*, /, o, x 등)의 리스트를 준비합니다.
  • 패치(patch) 가져오기bars.patches 속성으로 각 막대에 해당하는 패치 객체들을 얻습니다.
  • 해치 적용 — 패치들을 순회(iterate)하면서 각 막대에 해치 패턴을 설정합니다.
  • 그래프 출력show() 메서드를 호출해 최종 그래프를 화면에 표시합니다.

예제 코드

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

# 그림 크기 및 레이아웃 자동 조정 설정
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# 두 개의 열을 가진 임의의 데이터프레임 생성
df = pd.DataFrame(np.random.rand(5, 2), columns=['a', 'b'])
ax = plt.figure().add_subplot(111)

# 막대 그래프 생성
bars = df.plot(ax=ax, kind='bar')

# 해치 패턴 목록 정의
hatches = ["*", "/", "o", "x"]

# 각 막대 패치에 무작위 해치 패턴 적용
for patch in bars.patches:
    patch.set_hatch(hatches[np.random.randint(10) % len(hatches)])

plt.show()

코드 설명

np.random.rand(5, 2)는 0과 1 사이의 난수로 이루어진 5×2 배열을 생성하며, 이를 바탕으로 'a'와 'b' 두 열을 가진 데이터프레임이 만들어집니다. 막대 그래프를 그린 후에는 bars.patches를 통해 모든 막대 객체에 접근할 수 있습니다.

patch.set_hatch() 메서드에 해치 문자를 전달하면 해당 막대에 패턴이 채워집니다. 위 예제에서는 np.random.randint(10) % len(hatches)를 사용해 해치 목록의 인덱스를 무작위로 선택하므로, 실행할 때마다 다양한 패턴 조합을 확인할 수 있습니다.

참고로 Matplotlib에서 사용 가능한 대표적인 해치 기호는 /, \\, |, -, +, x, o, O, ., * 등이 있으며, 같은 문자를 반복하면 패턴의 밀도가 더 짙어집니다.