본문 바로가기
Python/Data Visualization

여러 개의 그래프 그리기 예제(반복문 사용)

by ISLA! 2023. 9. 7.

1. 여러 개의 그래프 그리기

- 시각화 할 변수 선택

- fig 만들기

 

  • fig=plt.figure(figsize=(20,10), dpi = 100) : matplotlib의 figure를 생성하고, 그림의 크기를 가로 20 인치, 세로 10 인치로 설정하며, 해상도는 100 dpi로 설정합니다.
  • axs=fig.subplots(2,4) : 2x4 형태의 서브플롯 그리드를 생성합니다. 즉, 2행 4열의 그리드를 생성하여 총 8개의 그래프를 그릴 수 있는 공간을 만듭니다.
  • lm_features 변수에 각 그래프에 사용할 특징들을 리스트로 정의합니다.
fig=plt.figure(figsize=(20,10), dpi = 100)
axs=fig.subplots(2,4)

lm_features = ['temperature', 'pressure', 'humidity', 'wind_speed',
       'wind_direction', 'precipitation', 'snowing', 'cloudiness']

 

2. 반복문으로 그래프 표현하기

- 반복문을 사용하여 여러 개의 그래프 그리기

- enumerate를 이용, Index 값을 4로 나눈 몫과 나머지로 Row, col 지정

 

  • for i,j in enumerate(lm_features): : 각 특징별로 그래프를 그리기 위해 lm_features 리스트를 반복하며 인덱스와 특징 이름을 얻습니다.
  • 각 그래프의 x축에 사용할 두 가지 레이블을 정의합니다. 여기서는 'target>high'와 'target<=high'를 사용합니다.
  • y 변수에 각 레이블에 대한 해당 특징의 평균 값을 구하여 리스트로 저장합니다.
  • row = int(i/4) 와 col = i%4를 사용하여 그래프가 그려질 위치를 결정합니다.
  • axs[row][col].bar(x, y)를 사용하여 막대 그래프를 그립니다.
  • axs[row][col].set_title("target X " + lm_features[i], fontsize= 20)를 사용하여 각 그래프의 제목을 설정합니다.
  • axs[row][col].set_ylabel(lm_features[i]+"의 평균", fontsize= 15)를 사용하여 각 그래프의 y축 레이블을 설정합니다.
  • axs[row][col].set_xticks(['target>high','target<=high'])와 axs[row][col].set_xticklabels(['target>high','target<=high'], fontsize = 17)를 사용하여 x축의 눈금 레이블을 설정합니다.

  • fig.tight_layout()를 호출하여 그래프들 사이의 간격을 조정합니다.
  • plt.show()를 사용하여 그래프를 출력합니다. 결과적으로, 이 코드는 각 특징(온도, 압력, 습도 등)에 대해 'target>high'와 'target<=high'인 경우의 평균 값을 비교하는 막대 그래프를 2x4 형태의 그리드로 출력합니다.
for i,j in enumerate(lm_features):

    x = ['target>high','target<=high']
    y = [train[train['target']>high][j].mean(), train[train['target']<=high][j].mean()]

    row = int(i/4)
    col = i%4


    axs[row][col].set_title("target X " + lm_features[i], fontsize= 20)
    axs[row][col].set_ylabel(lm_features[i]+"의 평균", fontsize= 15)
    axs[row][col].set_xticks([0,1])
    axs[row][col].set_xticklabels(['target>high','target<=high'], fontsize = 17)
    axs[row][col].bar(x, y)
    
    fig.tight_layout()

plt.show()
728x90