let us not love with words or tongue but actions and truth.

IT/파이썬

[그래프] subplot 활용하기

sarah0518 2021. 8. 12. 17:53

하나의 화면에 여러개의 그래프를 표시해야 할 때가 있습니다.

 

예를 들어볼까요.

 

1반부터 4반까지 있을 때, 

 

4개의 학급의 과목점수 영어/수학/국어/사회 등의 점수분포를 비교해야 된다고 해보죠.

 

표로 각 반별 과목별 점수의 평균을 표현하게 되면 이렇게 되겠죠.

  1반 2반 3반 4반
영어 80 82 83 73
수학 67 73 82 91
국어 73 72 83 82
사회 78 78 98 97

 

이러한 정보의 그래프를 표처럼 나타낼 수 있는 방법이 있습니다. 

 

 

위의 그림을 보시면 

 

각 반별 과목의 점수를 비교하기 쉽게 그려놓은 것을 볼 수 있습니다.

 

이렇게 그래프를 그릴 수 있게 해주는 것이

 

오늘 정리해볼 subplot이라는 함수입니다.

 

subplot에서 꼭 기억하셔야 될 것은

 

subplot(행, 열, 순서)라는 것입니다.

 

코드로 설명드리면 더 이해가 쉬울 것 같네요.

 

우선 그래프를 그리기 위한 기본 library를 import 합니다.

1
2
from matplotlib import pyplot as plt
import seaborn as sns
cs

 

 

아래 코드를 보시면,

 

for 문 안에 plt.subplot이 들어 있는 것을 보실 수 있습니다.

 

아까 subplot은, (행, 열, 순서) 로 값이 들어간다고 했습니다.

 

subplot(2, 2, i+1)

 

위와 같이 표현되어 있으니, 2x2 모양의 그래프가 그려지는 것이죠.

1
2
3
4
5
6
7
8
9
10
glist=['영어','수학','국어','사회']
 
plt.figure(figsize=(10,8))
sns.set(font="NanumGothic",
        rc={"axes.unicode_minus":False,  'figure.figsize':(12,10)},
        style='whitegrid')
for i in range(len(glist)):
    plt.subplot(2,2,i+1)
    sns.boxplot(x=test['학급'] , y=test[glist[i]] )
 
cs

 

아까 위에서 보여드렸던 그림과 같이 나오는 것입니다.

 

i 는 glist의 length만큼 증가할 것이고,

순서대로 영어, 수학, 국어, 사회 과목에 대한 그래프를 그려주는 것입니다.

 

 

만약 그래프를 한줄로 즉 1x4의 형태로 그려주고 싶다면 어떻게 바꿔주면 될까요? 

subplot(1, 4, i+1

로 변경해주시면 됩니다.

 

즉, 행이 1줄, 열이 4줄이라는 뜻이겠죠.

 

그러면 그래프는 아래와 같이 나올 겁니다.

 

 

 

 

마지막으로 퀴즈!

 

그렇다면 그려야할 그래프는 과목의 개수처럼 4개인데,

 

subplot(2, 3, i+1

 

위와 같이 subplot의 값을 넣어주면 어떻게 될까요?

 

 

 

 

 

위의 그럼 처럼 나머지 5, 6번에 해당하는 그래프들은

 

그냥 빈칸(공백)으로 처리가 되는 것을 볼 수 있습니다.