머신러닝 및 딥러닝/Python

[파이썬/Pandas] 막대 그래프 그리기

밴B 2021. 4. 27. 11:37
728x90
반응형



안녕하세요.
이번 글에서는 Pandas 라이브러리를 사용해 막대그래프를 그리는 법을 설명해 보겠습니다.

Pandas 라이브러리는 데이터 정리 및 분석 할 때 많이 사용되며 쉽게 다양한 그래프를 바로 그려볼 수도 있습니다.
이 글에서는 Kaggle의 데이터 과학자 설문조사에서 추출한 데이터셋을 예로 들어 설명해보겠습니다.

import pandas as pd # 2020 설문조사에서 데이터 과학자들이 사용하는 프로그래밍 언어 
df = pd.DataFrame({'lang':['Python', 'R', 'SQL', 'C', 'C++', 'Java', 'Javascript', 'Julia', 'Swift', 'Bash', "MATLAB", 'None', 'Other'], 'val':[15531, 4278, 7536, 3316, 3828, 3368, 2996, 263, 199, 1777, 2218, 207, 1946]})

캐글 데이터셋에서 데이터 과학자분들이 제일 많이 사용하는 프로그래밍 언어 투표 결과를 pandas 데이터프레임 df으로 만들어봤습니다.

이 데이터프레임을 바로. plot.bar()를 사용하여 막대그래프를 그릴 수 있습니다.

.plot.bar()로 막대그래프 그리기

df.plot.bar(x='lang', y='val', rot=0)

 

데이터 과학자들이 많이 사용하는 프로그래밍 언어

이렇게 글자가 겹치는 경우 다양한 방법으로 해결 가능합니다.

1) 글 사이즈 줄이기
2) 그래프 크기 키우기
3) 글 회전하기
4) 수평 막대그래프 그리기

 

글자 크기 줄이기

fontsize 값을 바꿔 글자 크기를 바꿀 수 있습니다.

df.plot.bar(x="lang", y="val", rot=0, fontsize=5)

fontsize를 사용하여 글자 크기를 줄인 그래프

그래프 크기 키우기

figsize=( , )에 값을 바꿔 그래프 크기를 바꿀수있습니다.

# 안겹치게 사이즈를 늘려준 그래프 
ax = df.plot.bar(x='lang', y='val', rot=0, figsize=(10,5))

figsize로 그래프 크기 바꾸기


 

글자 회전시키기

rot = 0 값을 바꾸면 글씨를 회전시킬 수도 있습니다.

# 글자 45도 회전 
ax = df.plot.bar(x='lang', y='val', rot=45) 

# 글자 90도 회전 
ax = df.plot.bar(x='lang', y='val', rot=90)

 


글자를 회전시키면 긴 글자가 겹치는 일은 없지만 고개도 같이 회전시켜야 하는 수고(?)가 있습니다.
웬만하면 글 회전시키는 일을 피하는 게 좋습니다.


 

수평 막대그래프 그리기

수평 막대그래프를 그리면 x-label을 회전시키는 일을 피할 수 있습니다.
수평 horizontal의 h를 붙힌 .plot.barh()로 수평 막대그래프 그리기

df.plot.barh(x="lang", y="val")

 


 

막대 그래프 길이 순으로 정렬

막대그래프는 아무래도 길이 순으로 정렬하는 게 보기에도, 이해하기에도 쉽습니다.
Pandas에서 데이터프레임을 .sort_values를 사용하여 정렬하면 쉽습니다.

# 데이터프레임 정렬 후 그래프 그리기 
df = df.sort_values(by=['val'], ascending=False) 
ax = df.plot.bar(x='lang', y='val', rot=0, figsize=(12,5)) 

# 정렬 후 수평 막대 그리기 
df = df.sort_values(by=['val'], ascending=True) 
ax = df.plot.barh(x='lang', y='val')

 

아무래도 막대 크기 순으로 보니 뒤죽박죽 섞인 막대그래프보다 보기에 편합니다.
파이썬, SQL, R, C++ 순으로 인기가 많은 것을 볼 수 있습니다.

 

 

 




 

막대그래프 색 바꾸기

막대 색깔은 color= 값을 바꿔 쉽게 바꿀 수 있습니다. 여기서 빨강 r, 초록 g, 파랑 b이런 값을 넣으면 이렇게 쨍한 색의 그래프를 볼 수 있습니다.

df.plot.barh(x='lang', y='val', color='r') 
df.plot.barh(x='lang', y='val', color='g') 
df.plot.barh(x='lang', y='val', color='b')

 



여기서 투명도 값인 alpha만 바꿔줘도 조금 더 보기 편한 색을 쉽게 만들 수 있습니다.

df.plot.barh(x='lang', y='val', color='r', alpha=0.5) 
df.plot.barh(x='lang', y='val', color='g', alpha=0.5) 
df.plot.barh(x='lang', y='val', color='b', alpha=0.5)

 

alpha값으로 좀 더 연한 색 만들기


따로 원하는 색이 있다면 색상 코드를 넣는 것도 가능합니다.

df.plot.barh(x='lang', y='val', color='#cdb4db') 
df.plot.barh(x='lang', y='val', color='#8e9aaf')

 


한 가지 색상이 아니라 여러 가지 색상을 넣는것도 가능! coolors 같은 색 조합 사이트에서 참고하여 좋은 조합을 찾는걸 추천합니다.

df.plot.barh(x='lang', y='val', color=['yellow', 'green'], alpha=0.5) #두 가지 색을 넣어 반복 
my_colors = ['#fcd5ce', '#e8e8e4', '#ffd7ba'] 
df.plot.barh(x='lang', y='val', color=my_colors) #세 가지 색이 반복

 

사실 데이터 시각화 코스에서는 한가지 색을 쓰는 걸 추천했지만 가끔 여러가지 색상도 나쁘진 않다고 생각합니다 (개인적인 생각)

 

막대 두께 조정하기

또 원하는 스타일에 맞게 width 값으로 막대 두께도 조정 가능합니다.

df.plot.barh(x='lang', y='val', width=0.3, color=my_colors) 
df.plot.barh(x='lang', y='val', width=0.8, color=my_colors)

 

 

막대그래프 완성!


xlabel (x축 제목) title (그래프 제목), 범례가 필요 없는 경우 legend=False를 넣어주면 그래프 완성!

df.plot.barh(x='lang', y='val', figsize=(8,5), xlabel="Programming Language", title="What programming languages do you use on a regular basis?", width=0.8, color=['#2a9d8f', '#e9c46a', '#f4a261', '#e76f51'], legend=False)

 

완성된 그래프

 


이번 글에서는 파이썬의 Pandas 라이브러리를 사용하여 막대그래프를 그리는 방법을 정리해봤습니다.
오타나 궁금한 점이 있다면 댓글로 남겨주세요 :)

728x90
반응형