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

Matplotlib로 하나의 차트에 여러 개의 가로 막대 그래프 그리는 방법

데이터 시각화에서 두 개 이상의 데이터 계열을 비교해야 할 때, 하나의 차트에 여러 개의 가로 막대를 나란히 배치하는 방식이 매우 유용합니다. Matplotlib에서는 barh() 함수를 활용하면 손쉽게 구현할 수 있습니다. 아래 단계와 예제 코드를 따라 해보세요.

구현 단계

  • 라이브러리 임포트: pandas, matplotlib, numpy 라이브러리를 불러옵니다.

  • 그림 크기 설정: figure 크기를 지정하고 서브플롯 주변 및 사이의 패딩을 조절합니다.

  • 막대 위치 배열 생성: 각 가로 막대가 위치할 y축 좌표 배열을 만듭니다.

  • 막대 너비 변수 초기화: 막대의 너비를 결정하는 width 변수를 설정합니다.

  • 가로 막대 그래프 생성: barh() 메서드를 사용하여 데이터 계열별로 가로 막대를 그립니다. 두 번째 막대는 첫 번째 막대 위치에 width를 더한 값에 배치하여 나란히 표시합니다.

  • Y축 눈금 및 레이블 설정: y축 눈금과 눈금 레이블을 지정하고 적절한 범위(limit)를 설정합니다.

  • 범례 추가: 차트 오른쪽 상단(upper right)에 범례를 배치합니다.

  • 그래프 표시: show() 메서드를 호출하여 최종 그림을 화면에 출력합니다.

예제 코드

import pandas
import matplotlib.pyplot as plt
import numpy as np

# 그림 크기 설정
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# 가로 막대의 위치 배열
ind = np.array([0, 1, 2])

# 막대 너비
width = 0.4

fig, ax = plt.subplots()

# 가로 막대 그래프
ax.barh(ind, np.array([4, 3, 5]), width, color='orange', label='N')
ax.barh(ind + width, np.array([2, 5, 2]), width, color='blue', label='M')

# Y축 눈금 및 눈금 레이블 설정
ax.set(yticks=ind + width, yticklabels=np.array(['A', 'B', 'C']),
ylim=[2*width - 1, len(ind)])

# 오른쪽 상단에 범례 배치
ax.legend(loc='upper right')

# 그래프 출력
plt.show()

실행 결과

위 코드를 실행하면 주황색('N')과 파란색('M') 두 데이터 계열이 카테고리 A, B, C별로 나란히 배치된 가로 막대 그래프가 생성됩니다. 각 카테고리마다 두 개의 막대가 짝을 이루어 값을 직관적으로 비교할 수 있으며, 오른쪽 상단의 범례를 통해 어떤 색상이 어떤 계열인지 쉽게 확인할 수 있습니다.

Matplotlib로 하나의 차트에 여러 개의 가로 막대 그래프 그리는 방법

핵심 포인트 정리

여러 개의 가로 막대를 하나의 차트에 그리는 핵심은 막대 위치 오프셋입니다. 두 번째 barh() 호출 시 ind + width처럼 기준 위치에 너비만큼 더해주면, 막대들이 겹치지 않고 깔끔하게 나란히 배치됩니다. 데이터 계열이 세 개 이상일 경우에도 같은 방식으로 오프셋을 누적하여(ind + 2*width 등) 확장할 수 있습니다.