그래프를 나누고 다시 합치는 Subplot 공부하기

by 박정수

우리는 지난 편에 Y축을 한 개를 더 만들면서 한 개의 그래프에 두 개의 line plot을 공부를 했는데, 요번에는 헌이의 1월 공부시간 , 2월 공부시간을 독립적으로 한 개의 그래프로 그리고 다시 이 전체의 그래프를 한 개의 그래프로 묶어서 보고도 편하고, 공간도 저장하는 기술을 보여줄게. 이 내용이 이해가 된다면 다음 편은 진짜 멋진 거 보여줄게. 너희 둘의 일주일 생활 패턴을 한눈에 비교하는 대시보드를 만들어볼 거야


가로 2개 세로 2개 또는 2 by 2 subplot이라고 부르면 돼

subplot.png


동생의 공부시간은 꾸준한데, 언니는 시간은 오르기는 하는데 매일매일 똑같은 시간은 아니고,

언니는 결국 게임을 하지 않기로 했기에 (작심삼일?) 동생도 게임시간을 줄이고 있네. 아빠는 이 결과를 보고 기뻐. 자발적으로 자매 간에 결정을 하고 실천을 했다는 것이. 상장을 대신해서 다음 주에는 "대시보드"라는 것을 배워줄게. 구글에서 자료를 찾아 미리 예습을 하거나, chatGPT에게 "GEMINI 님, Python code로 dash board를 만든 다는 것이 무슨 의미인가요?" 이렇게 말이야.




Subplot: 여러 그림을 한 화면에

import matplotlib.pyplot as plt

import numpy as np

plt.rcParams['font.family'] ='Malgun Gothic'

plt.rcParams['axes.unicode_minus'] =False

#출처: https://giveme-happyending.tistory.com/168 [소연의_개발일지:티스토리]


# 데이터 준비

days = np.arange(1, 8)

sister_study = [2, 3, 1.5, 4, 3.5, 5, 6] # 언니 공부 시간

sister_game = [1, 0.5, 2, 0.5, 1, 0, 0] # 언니 게임 시간

younger_study = [1, 1.5, 1, 2, 2.5, 3, 4] # 동생 공부 시간

younger_game = [2, 2, 2.5, 1.5, 1.5, 1, 0.5] # 동생 게임 시간


# 2x2 subplot 생성

fig, axes = plt.subplots(2, 2, figsize=(12, 10))

fig.suptitle('두 딸의 일주일 생활 패턴 분석', fontsize=16, fontweight='bold')


# 그림 1: 언니 공부 시간

axes[0, 0].plot(days, sister_study, marker='o', color='steelblue', linewidth=2)

axes[0, 0].set_title('언니의 공부 시간', fontsize=12, fontweight='bold')

axes[0, 0].set_xlabel('일차')

axes[0, 0].set_ylabel('시간 (h)')

axes[0, 0].grid(True, alpha=0.3)

axes[0, 0].fill_between(days, sister_study, alpha=0.3, color='steelblue')


# 그림 2: 언니 게임 시간

axes[0, 1].plot(days, sister_game, marker='s', color='coral', linewidth=2)

axes[0, 1].set_title('언니의 게임 시간', fontsize=12, fontweight='bold')

axes[0, 1].set_xlabel('일차')

axes[0, 1].set_ylabel('시간 (h)')

axes[0, 1].grid(True, alpha=0.3)

axes[0, 1].fill_between(days, sister_game, alpha=0.3, color='coral')


# 그림 3: 동생 공부 시간

axes[1, 0].plot(days, younger_study, marker='o', color='mediumseagreen', linewidth=2)

axes[1, 0].set_title('동생의 공부 시간', fontsize=12, fontweight='bold')

axes[1, 0].set_xlabel('일차')

axes[1, 0].set_ylabel('시간 (h)')

axes[1, 0].grid(True, alpha=0.3)

axes[1, 0].fill_between(days, younger_study, alpha=0.3, color='mediumseagreen')


# 그림 4: 동생 게임 시간

axes[1, 1].plot(days, younger_game, marker='s', color='orchid', linewidth=2)

axes[1, 1].set_title('동생의 게임 시간', fontsize=12, fontweight='bold')

axes[1, 1].set_xlabel('일차')

axes[1, 1].set_ylabel('시간 (h)')

axes[1, 1].grid(True, alpha=0.3)

axes[1, 1].fill_between(days, younger_game, alpha=0.3, color='orchid')


plt.tight_layout()

plt.show()


핵심 포인트:

plt.subplots(2, 2): 2행 2열, 즉 그림 4개를 한 번에 만들어

axes[0, 0]: 첫 번째 행, 첫 번째 열 (왼쪽 위)

axes[0, 1]: 첫 번째 행, 두 번째 열 (오른쪽 위)

axes[1, 0]: 두 번째 행, 첫 번째 열 (왼쪽 아래)

axes[1, 1]: 두 번째 행, 두 번째 열 (오른쪽 아래)

fill_between(): 선 아래를 색칠해서 더 예쁘게 만들어


그리고 코드 내용이 전체 또는 부분적으로 이해가 가지 않으면 지난번 GEMINI에게 물어 봤듯이, 원하는 부분을 chatGPT에 copy and paste해서 이 내용을 해석해주세요.. 하면되. 그리고 지금은 2by2 인데 나의 1,2,3월 공부기간과 언니의 1,2,3월 공부시간 데이터를 주고, 2*3으로 만들어 주세요, 허가나 3*2로 만들어 주세요 하면되요.

이전 15화그래프가 왜 필요한가를 이해하는 예제 1