[이론] 시각화 : 여러 그래프
1. 하나의 표안에 여러개의 그래프 생성
: 중첩이 되어 그려진다고 생각
import pandas as pd
df_gp=pd.read_csv('data/건강보험심사평가원_진료비.csv')
pivot = pd.pivot_table(df, index='진료년도', columns='시도',
values='환자수', aggfunc='mean')
pivot = pivot.astype('int64')
pivot
pivot의 값을 정수 형태로 설정 ('int64')
1) 하나의 표안에 여러개의 선그래프
x = pivot.index.astype('str')
y1 = pivot['세종']
y2 = pivot['경기']
y3 = pivot['제주']
plt.figure(figsize=(20,10))
ax = plt.subplot()
ax.plot(x, y1, label = '세종', color = 'blue')
ax.plot(x, y2, label = '경기', color = 'green')
ax.plot(x, y3, label = '제주', color = 'orange')
plt.legend()
plt.show()
▷ 여러개의 그래프를 하나에 그릴때, label 인자와 legend() 함수로 범례를 구분
▷ x축이나 y축이 동일한 값으로 설정해야 여러개를 중첩해서 그릴 수 있음
▷ y값을 3개 생성 : 그래프를 3개 형성한다는 뜻
▶ 같은 ax에 여러번 반복해서 그래프 그리는 함수를 호출해주면 됨
▶ label은 id같은 고유값, color로 그래프 색 설정 (색상표값 넣어주기도 가능)
▶ legend() : 표가 가지고 있는 라벨의 범례를 표기하는 함수
2) seaborn으로 간단하게 여러개의 선그래프 작성
pivot_sub = pivot[['세종','경기','제주','대구','대전','부산']]
plt.figure(figsize=(20,10))
ax = plt.subplot()
sns.lineplot(data = pivot_sub, ax = ax) # ax인자로 원하는 Axes 그리기 가능
plt.show()
lineplot()으로 여러 그래프를 그릴땐 데이터프레임 구조를 먼저 구축
▷ x축, y축 설정하지 않으면 기본적으로 인덱스가 x축, 각 컬럼이 y축으로 설정됨
▷ groupby할 때, as index를 true로 줘서 한번에 그래프 그리기 가능
3) 칼럼 목록으로 반복문 활용
pivot_sub = pivot[['세종','경기','제주','대구','대전','부산']]
plt.figure(figsize=(20,10))
ax = plt.subplot()
for col in pivot_sub.columns:
ax.plot(pivot_sub.index, pivot_sub[col], label = col)
ax.legend()
plt.show()
▷ x축은 index로 공통적으로 설정 (pivot_sub.index)
▷ y값만 반복문으로 column해당 값을 인덱싱을 통해 시리즈로 넣어줌
▷ 라벨엔 컬럼이름 그대로 넣어줌
4) 막대그래프에 평균선 그리기
axhline() 함수 : 수평선 그래프 생성
axvline() 함수 : 수직선 그래프 생성
pivot_2022 = pivot.loc[2022]
mean = pivot_2022.mean() # 평균 산출
plt.figure(figsize=(20,10))
ax = plt.subplot()
ax.bar(x=pivot_2022.index, height=pivot_2022, color = '#B7B7B7', label='값')
ax.axhline(mean, color='red', linestyle='--', label=f'평균: {mean:.2f}')
plt.legend()
plt.show()
linestyle 인자를 활용하여 선의 스타일을 지정 가능
▷ ax.bar : height은 시리즈들이 들어감, color는 색상 팔레트에서 원하는 색 설정
▷ ax.axhline : 위에서 정의한 평균값인 mean 변수를 넣어줌
5) 중첩 막대그래프 그리기
bar() 함수의 bottom 인자
pivot_2022 = pivot.loc[2022]
pivot_2023 = pivot.loc[2023]
plt.figure(figsize=(20,10))
ax = plt.subplot()
# 2022 데이터를 먼저 막대 시각화
ax.bar(pivot_2022.index, pivot_2022, label='2022년')
# 2022 데이터 위에 중첩하여 시각화
ax.bar(pivot_2023.index, pivot_2023, bottom=pivot_2022, label='2023년')
plt.legend()
plt.show()
▷ ax.bar 두개가 서로 중첩되서 가려지지 않게 표현해야 함
→ bottom 인자를 추가하기 (데이터를 깔고 그위에 그림)
6) 그룹 수직 막대그래프
막대 그래프의 너비를 반으로 줄이고, 중앙 위치(오프셋)를 변경
→ 막대를 얇게 해서 이동시켜서 두개의 그래프를 그림
pivot_2022 = pivot.loc[2022]
pivot_2023 = pivot.loc[2023]
plt.figure(figsize=(20,10))
ax = plt.subplot()
# 막대 너비 설정
bar_width = 0.4
# 막대 위치 조정
x1 = [i - bar_width/2 for i in range(len(pivot_2022))]
x2 = [i + bar_width/2 for i in range(len(pivot_2023))]
# 첫 번째 막대
ax.bar(x1, pivot_2022, bar_width, label='2022년')
# 두 번째 막대
ax.bar(x2, pivot_2023, bar_width, label='2023년')
ax.set_xticks(range(len(x1)))
ax.set_xticklabels(pivot_2022.index, fontsize=12)
plt.legend()
plt.show()
▷ 막대 위치 조정시 i는 중심을 의미
▷ set_xticks : 눈금을 조정
▷ set_xticklabels : 눈금에 표현된 라벨값을 임의로 설정
2. 하나의 그림판에 여러개의 표 생성
row, col, index 컬럼을 지정하여 그림판안의 표 배치를 구성하고 원하는 표를 반환
row: 행의 개수를 지정
col: 열의 개수를 지정
index: row,col이 정해지면 순서를 통해 원하는 배치의 표를 반환
Axes 배치하기
plt.figure(figsize = (20,10))
ax1 = plt.subplot(2, 3, 1)
ax2 = plt.subplot(2, 3, 2)
ax3 = plt.subplot(2, 3, 3)
ax4 = plt.subplot(2, 3, 4)
ax5 = plt.subplot(2, 2, 4)
plt.show()
그림판을 그리드로 나눈 후, 인덱스에 해당하는 판에 표를 그려줌
그리드 구성을 중간에 변경할 수 있음 (2,3,n) → (2,2,m)
(순서)
1 2 3
4 5 6
df_gp=pd.read_csv('data/건강보험심사평가원_진료비.csv')
df_sl = df_gp[df_gp['시도'] == '서울']
df_gg = df_gp[df_gp['시도'] == '경기']
plt.figure(figsize = (20,8))
ax1 = plt.subplot(1,2,1)
ax2 = plt.subplot(1,2,2)
ax1.hist(x=df_sl['환자수'], bins=30)
ax1.set_title('서울 히스토그램',fontsize = 16)
sns.boxplot(data=df_gg,
y='환자수', ax = ax2)
ax2.set_title('경기 상자그림', fontsize = 16)
plt.show()
▷ 첫번째 axis에선 히스토그램, 두번째 axis에는 boxplot을 넣어줌
▷ set_title : 제목 작성