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

파이썬 Matplotlib로 여러 그래프를 하나의 차트에 결합하는 방법


소개

Matplotlib는 하나의 그래프 위에 두 개 이상의 플롯을 겹쳐 그릴 수 있는 파이썬 대표 시각화 라이브러리입니다. 이 튜토리얼에서는 서로 다른 두 개의 y축을 활용해 여러 데이터를 한 화면에 표현하는 방법과, 여러 개의 서브플롯(subplot)을 결합해 하나의 완성된 차트를 만드는 과정을 단계별로 알아봅니다.

사전 준비: Matplotlib 설치

먼저 파이썬 명령 프롬프트(터미널)를 열고 pip 명령어로 Matplotlib를 설치합니다.

pip install matplotlib

설치가 끝나면 다음과 같이 pyplot 모듈을 임포트합니다.

import matplotlib.pyplot as plt

1단계. 시각화할 데이터 준비

이번 예제에서는 아이폰(Iphone), 갤럭시(Galaxy), 픽셀(Pixel) 세 종류의 스마트폰에 대해 2016년부터 2020년까지 연도별 판매 대수(단위: 백만 대)를 담은 가상의 데이터를 사용합니다. 실습할 때는 본인의 데이터로 자유롭게 바꿔 적용할 수 있습니다.

import matplotlib.pyplot as plt

# 데이터 준비 (통계 정확성 없이 임의로 만든 예제 데이터입니다)
mobile = ['Iphone','Galaxy','Pixel']

# 연도별 스마트폰 판매 대수 (단위: 백만 대)
units_sold = (('2016',12,8,6),
('2017',14,10,7),
('2018',16,12,8),
('2019',18,14,10),
('2020',20,16,5),)

2단계. 데이터 분할 및 축 좌표 설정

zip(*units_sold)를 사용하면 중첩된 튜플을 연도, 아이폰 판매량, 갤럭시 판매량, 픽셀 판매량 배열로 손쉽게 분리할 수 있습니다. 막대그래프가 그려질 x축 위치(Position)와 막대 너비(Width)도 함께 지정합니다.

# 데이터 분할
Years, IPhone_Sales, Galaxy_Sales, Pixel_Sales = zip(*units_sold)

# x축 위치 설정
Position = list(range(len(units_sold)))

# 막대 너비 설정
Width = 0.2

3단계. 첫 번째 서브플롯 생성

plt.subplot(2, 1, 1)은 전체 캔버스를 2행 1열로 나눈 뒤 첫 번째 칸을 선택한다는 의미입니다. 실행 결과로 AxesSubplot 객체가 반환됩니다.

plt.subplot(2, 1, 1)
<matplotlib.axes._subplots.AxesSubplot at 0x214185d4e50>

파이썬 Matplotlib로 여러 그래프를 하나의 차트에 결합하는 방법

4단계. 아이폰 판매량 막대그래프 그리기

첫 번째 서브플롯에 아이폰 판매량을 초록색 막대그래프로 표현하고, y축 라벨과 x축 눈금(연도)을 지정합니다.

Iphone = plt.bar(Position, IPhone_Sales,color='green')
plt.ylabel('IPhone Sales')
plt.xticks(Position, Years)

파이썬 Matplotlib로 여러 그래프를 하나의 차트에 결합하는 방법

5단계. twinx()로 보조 y축을 추가해 갤럭시 판매량 표현

plt.twinx()를 호출하면 x축을 공유하는 새로운 y축이 오른쪽에 생성됩니다. 이 축에 갤럭시 판매량을 파란색 선그래프('o-' 마커 포함)로 겹쳐 그리면, 막대와 선을 동시에 비교할 수 있는 복합 차트가 완성됩니다.

plt.twinx()
Galaxy = plt.plot(Position, Galaxy_Sales, 'o-', color='blue')
plt.ylabel('Galaxy Sales')
plt.xticks(Position, Years)

파이썬 Matplotlib로 여러 그래프를 하나의 차트에 결합하는 방법

6단계. 두 번째 서브플롯에 구글 픽셀 판매량 그리기

plt.subplot(2, 1, 2)로 두 번째 칸을 선택한 뒤, 노란색 선그래프로 픽셀 판매량을 그립니다. set_ylim(ymin=0)으로 y축 최솟값을 0으로 고정하면 그래프가 잘리지 않고 깔끔하게 표시됩니다.

plt.subplot(2, 1, 2)
plt.plot(Position, Pixel_Sales, color='yellow')
plt.gca().set_ylim(ymin=0)
plt.xticks(Position, Years)
plt.show()

파이썬 Matplotlib로 여러 그래프를 하나의 차트에 결합하는 방법

전체 코드 예제: 하나로 합쳐서 이미지로 저장하기

지금까지의 과정을 모두 합친 전체 코드입니다. plt.savefig()를 사용하면 완성된 차트를 PNG 파일로 저장할 수 있으며, dpi 옵션으로 해상도를 조절할 수 있습니다.

import matplotlib.pyplot as plt

# 데이터 준비 (예제용 임의 데이터)
mobile = ['Iphone','Galaxy','Pixel']

# 연도별 스마트폰 판매 대수 (단위: 백만 대)
units_sold = (('2016',12,8,6),
('2017',14,10,7),
('2018',16,12,8),
('2019',18,14,10),
('2020',20,16,5),)

# 데이터 분할
Years, IPhone_Sales, Galaxy_Sales, Pixel_Sales = zip(*units_sold)

# x축 위치와 막대 너비 설정
Position = list(range(len(units_sold)))
Width = 0.2

plt.subplot(2, 1, 1)
Iphone = plt.bar(Position, IPhone_Sales,color='green')
plt.ylabel('IPhone Sales')
plt.xticks(Position, Years)

plt.twinx()
Galaxy = plt.plot(Position, Galaxy_Sales, 'o-', color='blue')
plt.ylabel('Galaxy Sales')
plt.xticks(Position, Years)

plt.subplot(2, 1, 2)
plt.plot(Position, Pixel_Sales, color='yellow')
plt.ylabel('Pixel Sales')
plt.gca().set_ylim(ymin=0)
plt.xticks(Position, Years)

# plt.show()
plt.savefig('CombiningGraphs.png', dpi=72)

파이썬 Matplotlib로 여러 그래프를 하나의 차트에 결합하는 방법

마무리

이처럼 Matplotlib의 subplot과 twinx 기능을 활용하면 여러 종류의 그래프를 하나의 화면에 자연스럽게 결합할 수 있습니다. 막대그래프와 선그래프를 조합하거나 여러 서브플롯을 배치하면, 복잡한 데이터도 한눈에 비교하기 쉬운 대시보드 형태의 시각화를 손쉽게 만들 수 있습니다.