함께하는 데이터 분석

[Python] Matplotlib 여러 개의 그래프 한번에 그리기 본문

데이터분석 공부/Python

[Python] Matplotlib 여러 개의 그래프 한번에 그리기

JEONGHEON 2022. 4. 14. 22:57

오늘은 matplotlib의 subplots를 이용하여

 

여러 개의 그래프를 한 번에 그려보도록 하겠습니다.

 

그래프는 이전에 그렸던 그래프들을

 

그대로 가져와 보겠습니다.

 

시작해볼게요!

 

 

라이브러리 불러오기

import matplotlib.pyplot as plt

plt.rc('font', family = 'AppleGothic') # mac 
# plt.rc('font', family = 'Malgun Gothic') # window
plt.rc('font', size = 12)
plt.rc('axes', unicode_minus = False) # -표시 오류 잡아줌

 

 

데이터 불러오기

science = ['physics', 'chemistry', 'life', 'earth']
people = [6.8, 8.0, 14.7, 14.9]

번거로움을 없애기 위해

 

위의 데이터만 가지고

 

선 그래프, 산점도, 막대그래프, 파이 차트를 만들어보겠습니다.

 

 

세부 속성 리스트

colors = ['aqua', 'pink', 'yellow', 'lightgreen']
wedgeprops = {'width' : 0.75, 'edgecolor' : 'w', 'linewidth' : 3}

산점도와 막대그래프, 파이 차트를 그릴 때 넣어줄 colors 리스트와

 

파이 차트를 그릴 때 사용할 wedgeprops입니다.

 

 

 

단일 그래프 그리기

plt.figure(figsize = (10, 5))
plt.plot(science, people, color = 'purple', ls = '-.')
plt.grid(ls = ':')
plt.title('첫 번째 그래프')
plt.xlabel('과학탐구')
plt.ylabel('응시자 수')
plt.show()

첫 번째 그래프는 간단한 선 그래프입니다.

 

이제 다음 그래프인 산점도 그래프를 그려보겠습니다.

 

plt.figure(figsize = (10, 5))
plt.scatter(science, people, color = colors)
plt.title('두 번째 그래프')
plt.xlabel('과학탐구')
plt.ylabel('응시자 수')
plt.show()

동일한 데이터로 4개의 그래프를 한 번에 그리는 것을 보여드리기 위해

 

의미는 없지만 scatter를 이용하여 산점도 그래프를 그려봤습니다.

 

plt.figure(figsize = (10, 5))
plt.bar(science, people, color = colors, alpha = 0.4)
plt.title('세 번째 그래프')
plt.xlabel('과학탐구')
plt.ylabel('응시자 수')
plt.show()

막대그래프입니다.

 

이제 마지막으로 파이 차트를 그려보겠습니다.

 

plt.figure(figsize = (10, 5))
plt.pie(people, labels = science, autopct = '%.1f%%', startangle = 90,
             counterclock = False, colors = colors, wedgeprops = wedgeprops,
             pctdistance = 0.8)
plt.title('네 번째 그래프')
plt.xlabel('과학탐구')
plt.ylabel('응시자 수')
plt.legend(loc = (1, 0.6), title = '과학탐구')
plt.show()

여기까지 앞서 그려봤던 그래프를 하나하나 그려봤습니다.

 

이제 plt.subplots를 이용하여 위의 4개의 그래프를 한 번에 그려보겠습니다.

 

 

 

여러 개의 그래프 한 번에 그리기

f, ax = plt.subplots(2, 2, figsize = (20, 15))
f.suptitle('여러개의 그래프 한번에 그리기')

ax[0, 0].plot(science, people, color = 'purple', ls ='-.')
ax[0, 0].grid(ls = ':')
ax[0, 0].set(xlabel = '과학탐구', ylabel = '응시자 수')
ax[0, 0].set_title('첫 번째 그래프')

ax[0, 1].scatter(science, people, color = colors)
ax[0, 1].set(xlabel = '과학탐구', ylabel = '응시자 수')
ax[0, 1].set_title('두 번째 그래프')


ax[1, 0].bar(science, people, color = colors, alpha = 0.4)
ax[1, 0].set(xlabel = '과학탐구', ylabel = '응시자 수')
ax[1, 0].set_title('세 번째 그래프')

ax[1, 1].pie(people, labels = science, autopct = '%.1f%%', startangle = 90,
             counterclock = False, colors = colors, wedgeprops = wedgeprops,
             pctdistance = 0.8)
ax[1, 1].legend(loc = (1, 0.6), title = '과학탐구')
ax[1, 1].set(xlabel = '과학탐구', ylabel = '응시자 수')
ax[1, 1].set_title('네 번째 그래프')

plt.show()

subplots에 (2, 2)를 넣어줘서 2행 2열, 총 4개의 그래프를 그려준 것입니다.

 

만약 6개의 그래프를 그리고 싶으시다면 (2, 3) 또는 (3, 2)로 설정해주시면 됩니다.

 

f.suptitle은 supertitle의 약자로 대표 타이틀입니다.

 

전체 제목이라고 할 수 있죠.

 

그다음 ax[0, 0]은 1행 1열에 그릴 그래프라는 뜻입니다.

 

그렇다면 ax[1, 1]는 2행 2열이겠죠.

 

이렇게 아주 간단하게 여러 개의 그래프를 한 번에 그릴 수 있습니다.

 

한 가지 주의해야 할 점은 label 다는 것이 살짝 다르다는 점입니다.

 

단일 그래프를 그릴 때는 plt.xlabel, plt.ylabel로 각각 달아줬지만

 

여기서는 ax[,].set(xlabel = '~', ylabel = '~')로 한 번에 달아줍니다.

 

또 각 그래프의 타이틀은 ax[,].set_title('~')로 달아줍니다.

 

이러한 것들만 조심한다면

 

여러 개의 그래프를 한눈에 보기 쉽게 그릴 수 있습니다.

 

감사합니다!