안녕하세요~ '꽁냥이'입니다.
이번 포스팅에서는 바 차트(Bar chart)를 그려보는 법에 대해서 알아볼 거예요. 꽁냥이는 "바 차트 그리기"에 대한 내용을 다음과 같이 5편에 걸쳐서 소개할 거예요.
1. Matplotlib을 이용하여 바 차트, 수평 바 차트 그리기
3. Matplotlib 바 차트 번외 - 막대에 그라데이션 적용하기
4. Matplotlib을 이용하여 그룹 바 차트(Grouped bar chart) 그리기
5. Matplotlib을 이용하여 스택 바 차트(Stacked bar chart) 그리기
그럼, "Matplotlib을 이용하여 바 차트, 수평 바 차트 그리기"편을 시작해보겠습니당~
먼저 다음의 상황을 생각해보겠습니당~!
"""
나팀장 : 꽁냥씨~ 어디가여?
꽁냥이 : 아 팀장님! 이제 퇴근하려고 합니다.
나팀장 : 아 그렇군요. 다름이 아니고 방금 병원 환자 데이터를 받았는데, 데이터를 보내줄 테니 지난달 방문환자 수를 연령별로 정리해서 오늘 중으로 보내주세요. 제가 눈이 안 좋아서 표 말고 그림으로 보내주세요.
꽁냥이 : 네 알겠습니다.
오늘도 꽁냥이는 야근을 합니다.
"""
위의 상황에서 꽁냥이가 해야 할 일은 밑줄 친 내용처럼, 방문환자 수를 연령별로 시각화하는 거예요. 이처럼 그룹별 또는 카테고리별로 각종 통계치를 시각화하고자 할 때 사용되는 그래프가 바로 바 차트(bar chart)입니다. 위 상황에서 그룹은 연령이 되겠고, 통계치는 방문환자수가 되겠네요~
자 그럼, 일을 빨리 끝내고 퇴근해볼까요?
여기서 다루는 내용은 다음과 같아요.
1. 데이터 및 전체 코드
꽁냥이가 시각화해야 할 데이터는 다음과 같습니다.
연령 | 환자수 (명) |
10대 이하 | 3 |
20대 | 3 |
30대 | 5 |
40대 | 7 |
50대 | 8 |
60대 이상 | 9 |
위 데이터를 바 차트로 출력하는 전체 코드는 다음과 같습니당~
import matplotlib.pyplot as plt
## 데이터
age_category = ['10대 이하', '20대', '30대', '40대', '50대', '60대 이상'] ## 연령 카테고리, x축 눈금에 표시될 라벨
num_patient = [3,3,5,7,8,9] ## 방문환자수
## 시각화
plt.figure(figsize=(10,10)) ## Figure 생성 사이즈는 10 by 10
xtick_label_position = list(range(len(age_category))) ## x축 눈금 라벨이 표시될 x좌표
plt.xticks(xtick_label_position, age_category) ## x축 눈금 라벨 출력
plt.bar(xtick_label_position, num_patient) ## 바차트 출력
plt.title('지난달 연령별 방문환자 수',fontsize=20) ## 타이틀 출력
plt.xlabel('연령') ## x축 라벨 출력
plt.ylabel('방문환자수') ## y축 라벨 출력
plt.show()
2. 바 차트 코드 설명
코드를 하나씩 살펴볼게용~
먼저 데이터를 변수에 담아줘야 합니다. 꽁냥이는 연령 카테고리와 그에 대응하는 방문환자수를 각각 리스트로 만들었습니다.
## 데이터
age_category = ['10대 이하', '20대', '30대', '40대', '50대', '60대 이상'] ## 연령 카테고리, x축 눈금에 표시될 라벨
num_patient = [3,3,5,7,8,9] ## 방문환자수
데이터가 준비됐으니 이제 바 차트를 그려봐야겠죠? 그림을 그릴 땐 캔버스(도화지)가 필요한 것처럼 Matplotlib에서는 Figure를 생성해줘야 합니다. 저는 사이즈를 가로 10, 세로 10으로 설정했어요. 각자 취향에 맞게 설정해주시면 되겠습니다.
## 시각화
plt.figure(figsize=(10,10)) ## Figure 생성, 사이즈는 10 by 10
다음으로 바 차트에서 막대기가 그려질 x 좌표를 설정하고 xticks 메서드를 통해서 x축 눈금 라벨을 그려줍시당~
xticks 메서드의 기본형식은 다음과 같습니다.
xticks(x축 눈금 좌표, 눈금 라벨)
여기서 x축 눈금 좌표와, 눈금 라벨은 리스트 또는 튜플 형식이며 개수가 서로 같아야 값이 올바르게 표시됩니다(개수가 일치하지 않아도 에러는 발생하지 않지만 라벨이 일부만 표시될 수 있습니다). 만약 눈금 라벨을 입력해주지 않으면 좌표 값이 출력됩니다.
xtick_label_position = list(range(len(age_category))) ## x축 눈금 라벨이 표시될 x좌표
plt.xticks(xtick_label_position, age_category) ## x축 눈금 라벨 출력
이제 바 차트를 그릴 준비가 되었습니다. 바 차트는 bar메서드를 이용하여 그릴 수 있으며 기본형식은 다음과 같습니다.
bar(x축 눈금 좌표, 막대기 높이)
여기서 x축 눈금 좌표와 막대기 높이는 리스트 또는 튜플 형식입니다. (막대기 높이는 방문환자 수에 해당합니당~)
plt.bar(xtick_label_position, num_patient) ## 바차트 출력
bar 메서드는 xticks 메서드와는 다르게 개수가 서로 일치하지 않으면 다음과 같은 에러가 발생합니다.
마지막으로, 이해를 돕기 위해 바 차트의 타이틀과 x축, y축 라벨을 넣어 줍시당~ 타이틀은 크게 표시하기 위해서 폰트 사이즈를 20으로 설정했습니다.
plt.title('지난달 연령별 방문환자 수',fontsize=20) ## 타이틀 출력
plt.xlabel('연령') ## x축 라벨 출력
plt.ylabel('방문환자수') ## y축 라벨 출력
지금까지 바 차트 그리기의 기본 골격에 대해서 알아보았습니당~ 처음에 보여드린 전체 코드를 실행하겠습니당.
혹시, 한글이 깨지는 분들은 [기타] Matplotlib 한글 폰트 설정 - Window 10을 참고하셔서 한글 폰트를 설정하시면 됩니당~
어때요? 너무 쉬워서 웃음이 나오실 거예요 ㄷㄷ;;
지금까지 수직으로 세워진 바 차트를 그려봤는데요. 상황에 따라서는 수평 바 차트를 그리는 것이 더 좋을 때가 있습니다. 꽁냥이 같은 경우는 카테고리의 수가 많을 때(10개를 넘어가는 경우) 수평 바 차트를 이용합니다. 카테고리가 많아질 경우, x축 눈금 라벨이 겹쳐지거나 겹치지 않게 회전을 한다고 해도 가독성이 떨어지는 경우가 있기 때문입니다. 아래와 같은 경우처럼 말이죠~
수평 바 차트를 그리는 기본 원리는 바 차트와 비슷합니다. bar대신 barh 메서드를 사용하는 것, 눈금의 좌표와 라벨이 y축으로, 막대기 높이는 x축으로 표시된다는 점만 다릅니다.
수평 바 차트를 그리는 전체 코드는 다음과 같습니당~
import matplotlib.pyplot as plt
## 데이터
age_category = ['10대 이하', '20대', '30대', '40대', '50대', '60대 이상'] ## 연령 카테고리, y축 눈금에 표시될 라벨
num_patient = [3,3,5,7,8,9] ## 방문환자수
## 시각화
plt.figure(figsize=(10,10)) ## Figure 생성 사이즈는 10 by 10
ytick_label_position = list(range(len(age_category))) ## y축 눈금 라벨이 표시될 x좌표
plt.yticks(ytick_label_position, age_category) ## y축 눈금 라벨 출력
plt.barh(ytick_label_position, num_patient) ## 바차트 출력
plt.title('지난달 연령별 방문환자 수',fontsize=20) ## 타이틀 출력
plt.ylabel('연령') ## y축 라벨 출력
plt.xlabel('방문환자수') ## x축 라벨 출력
plt.show()
위 코드를 실행하면 아래와 같이 '짠'하고 출력될 거예요.
지금까지 바 차트와 수평 바 차트 그리기에 대해서 알아봤는데요~ 어때요 참 쉽죠?
이번 포스팅에서는 바 차트에 대한 정말 기본적인 내용만 다룬 거예요. 바 차트를 그리는 법에 대해서 더 자세히 알고 싶으신 분들은 다음의 자료를 참고하시면 될 것 같습니당~
1) 바 차트 문서(영문)
이번 포스팅은 여기까지입니당~
궁금하신 내용이나 잘못된 내용, 그 밖에 하고 싶은 말은 댓글로 남겨주시면 감사하겠습니다.
다음 포스팅에서는 바 차트를 좀 더 예쁘게 꾸며보는 방법을 소개하려고 해요~ 열심히 그리고 잘 준비하겠습니당~!!
지금까지 '꽁냥이의 글' 읽어 주셔서 감사합니다. 안녕히 계세요~~>0<
'데이터 분석 > 시각화' 카테고리의 다른 글
[바 차트(Bar chart)] 4. Matplotlib을 이용하여 그룹 바 차트(Grouped bar chart) 그리기 (1690) | 2020.06.22 |
---|---|
[바 차트(Bar chart)] 3. Matplotlib 바 차트 번외 - 막대에 그라데이션 적용하기 (1100) | 2020.06.14 |
[바 차트(Bar chart)] 2. Matplotlib을 이용하여 바 차트 꾸미기 (5) | 2020.06.08 |
[기타] Matplotlib 한글 폰트 설정 - Window 10 (2) | 2020.05.31 |
[프롤로그] 들어가는 글 (0) | 2020.05.31 |
댓글