본문 바로가기
IT/인공지능

[matplotlib] 한번에 그래프 여러개 그리기

by uzzing' 2022. 7. 31.

위와 같이 컬럼의 개수가 많을 때, 이미지를 하나씩 보면 한눈에 보기 어렵다. 그래서 한번에 여러 그래프를 보는 방법을 정리한다.

 

테스트 데이터 생성

우선, 테스트 데이터를 만들었다. 

import pandas as pd
import matplotlib.pyplot as plt

test1 = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]
test2 = [1,3,3,3,5,5,5,5,5,7,7,7,7,7,7]

test_df = pd.DataFrame()

test_df['test1'] = test1
test_df['test2'] = test2
test_df['test3'] = test1
test_df['test4'] = test2
test_df['test5'] = test1
test_df['test6'] = test2
test_df['test7'] = test1
test_df['test8'] = test2

이렇게 실행하면 그래프가 스크롤로 많이 넘어가게 되어 보기가 힘들다. 

columns = test_df.columns
for column in columns:
    plt.hist(test_df[column])
    plt.show()

.... 생략


plt.subplots 사용하기

plt.subplots(1,2) 에서 리턴하는 f, axes 에 대해서 살펴보면,

f 는 전체 이미지에 대한 정보이며, axes 는 각각 위치에 대한 정보를 나타낸다. 

리턴 값의 순서가 정해져 있으므로, 변수 명에 대한 것보다 순서에 맞게 사용하는 것이 중요하다.

  • f.set_size_inches 함수 : 하나의 이미지로 출력할 때의 이미지 사이즈를 의미한다.
  • plt.subplots_adjust 함수 : 그래프 간의 간격을 조정할 때 크기를 지정해준다. 

위 두가지를 적절히 사용해주자.

f,axes = plt.subplots(2,2)  # 가로, 세로 이미지의 개수 설정
f.set_size_inches((10, 5))  # 전체 이미지의 크기 설정

plt.subplots_adjust(wspace = 0.25, hspace = 0.25)   # 너비여백, 높이여백 설정

axes[0][0].hist(test_df['test1'])
axes[0][1].hist(test_df['test2'])
axes[1][0].hist(test_df['test3'])
        
plt.show()

하나의 화면에 출력된 test1, test2, test3 그래프


함수로 정의

r(row), c(col) 사이즈로 만들어서 입력값을 준다. 

axes 에 접근할 때 axes[0][0] 이와 같이 접근한다. row, col 개수를 설정하면서 오류가 많이 났는데, subplots의 개수는 그려지는 그래프의 개수보다 많아야하는 것 같다.

  • hist 함수 : hist 말고 plot 함수를 써보니 되던데, 적절히 수정해서 사용해야겠다. 
  • set_title 함수 : 그래프의 title 을 함께 출력하면 시각적으로 보기가 편하다.
def showHist(df, r, c):
    f,axes = plt.subplots(r,c)
    f.set_size_inches((20, 10))

    plt.subplots_adjust(wspace = 0.5, hspace = 0.5)

    i = 0
    for column in df.columns.tolist():
        axes[i//c][i%c].hist(df[column])
        axes[i//c][i%c].set_title('test'+str(i+1))
        i = i + 1
            
    plt.show()
showHist(test_df, r=3, c=3)

하나의 화면에 출력된 test_df 의 모든 컬럼 그래프

 

 

 

반응형

댓글