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

Python Matplotlib에서 Y축을 공유하는 두 개의 수평 막대 차트 그리기

동일한 Y축을 공유하는 두 개의 수평 막대 차트(horizontal bar chart)를 그리려면 subplot() 메서드에서 sharey 옵션을 활용하면 됩니다. 또한 수평 막대를 그릴 때는 일반적인 bar() 대신 barh() 메서드를 사용합니다.

두 차트가 Y축을 공유하면 데이터 범주의 순서와 간격이 양쪽 차트에서 완벽하게 일치하기 때문에, 두 데이터 세트를 나란히 비교할 때 매우 유용합니다.

구현 단계

  • 데이터 포인트를 담을 리스트를 생성합니다.
  • figure() 메서드를 사용하여 새 figure를 생성하거나 기존 figure를 활성화합니다.
  • subplot() 메서드를 사용하여 현재 figure에 인덱스 1 위치(왼쪽)에 서브플롯을 추가합니다.
  • barh() 메서드를 사용하여 첫 번째 축(axe1)에 수평 막대를 그립니다.
  • subplot() 메서드를 사용하여 인덱스 2 위치(오른쪽)에 두 번째 서브플롯을 추가하며, 이때 sharey=axe1 옵션으로 첫 번째 축과 Y축을 공유합니다.
  • 두 번째 축(axe2)에도 수평 막대를 그립니다.
  • show() 메서드를 호출하여 최종 figure를 화면에 표시합니다.

예제 코드

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

y = [3, 1, 5]
x1 = [10, 7, 3]
x2 = [9, 5, 1]

fig = plt.figure()

axe1 = plt.subplot(121)
axe1.barh(y, x1, align='center', color='red', edgecolor='black')

axe2 = plt.subplot(122, sharey=axe1)
axe2.barh(y, x2, align='center', color='green', edgecolor='black')

plt.show()

코드 설명

plt.subplot(121)은 figure를 1행 2열로 나눈 뒤 첫 번째 칸을 의미하며, plt.subplot(122)는 같은 격자에서 두 번째 칸을 의미합니다. 핵심은 sharey=axe1 부분으로, 이 옵션 덕분에 오른쪽 차트는 왼쪽 차트와 Y축 눈금과 범위를 그대로 공유하게 되어 별도의 축 설정 없이도 두 차트가 정확히 정렬됩니다.

각 막대에는 align='center'로 Y값 중앙에 막대를 배치했고, coloredgecolor를 지정해 막대의 채우기 색상과 테두리 색상을 구분했습니다.

실행 결과

위 코드를 실행하면 왼쪽에는 빨간색 막대(x1 데이터), 오른쪽에는 초록색 막대(x2 데이터)가 그려진 두 개의 수평 막대 차트가 나란히 표시되며, 두 차트 모두 동일한 Y축 눈금을 사용하는 것을 확인할 수 있습니다.