본문 바로가기
데이터 분석/시각화

bar_chart_race 패키지로 움직이는 막대 그래프(Bar Chart, 바 차트) 그려보기 with Python

by 부자 꽁냥이 2022. 4. 28.

안녕하세요~ 꽁냥이에요.

 

최근에 움직이는 막대그래프에 관심이 생겼는데요. 왜냐하면 시간에 따라서 막대그래프들이 순위 경쟁을 통하여 위치가 바뀌는 것이 신기하더라고요. 움직이는 막대들이 마치 race를 한다고 해서 이러한 차트를 Race Bar Chart라고 합니다.

 

이러한 움직이는 막대그래프(Race Bar Chart)는 파이썬(Python)으로 어떻게 구현하는지 궁금하여 관련 내용을 찾아보다가 아주 좋은 패키지를 발견해서 공유해드리려고 해요.

 

바로 bar_chart_race라는 패키지인데요.

 

이게 정말 사용하기 쉽고 다양한 기능을 조절할 수 있어서 너무 좋더라고요.

 

따라서 이번 포스팅에서는 움직이는 막대그래프(Race Bar Chart)를 그려주는 파이썬(Python) 패키지 bar_chart_race에 대한 기본적인 사용법을 알려드리려고 해요.

 

1. 설치

2. 데이터 구조

3. 기본적인 사용법


   1. bar_chart_race 설치

우선 bar_chart_race라는 패키지를 깔아줍니다.

 

pip install bar_chart_race

 

아직 끝은 아니에요. 꽁냥이처럼 움직이는 막대그래프(Race Bar Chart)를 gif로 저장하려고 하시는 분들은 ImageMagick이라는 프로그램을 설치하셔야 해요.

 

ImageMagick 공식 홈페이지에서 설치 파일을 다운받을 수 있어요. 각자 운영체제에 맞는 최신 버전을 설치하면 됩니다. 설치 파일을 열고 기본 세팅값으로 설치하시기만 하면 됩니다.


   2. bar_chart_race 데이터 구조 - Pandas.DataFrame

bar_chart_race에서 취급하는 데이터 형식(객체)은 Pandas 데이터 프레임(DataFrame)입니다.

 

데이터 구조는 인덱스에는 Timestamp 형식의 날짜, 칼럼은 카테고리가 되며 각 셀(Cell)의 값들은 카테고리별로 시간에 따른 데이터 값으로 이루어져 있어야 합니다. 아래 그림을 보시면 이해가 되실 거예요.

 

bar_chart_race에서 다루는 데이터 기본 구조


   3. bar_chart_race 기본적인 사용법

bar_chart_race라는 함수를 이용하여 움직이는 막대그래프(Race Bar Chart)를 그릴 수 있어요.

 

아래는 데이터를 불러온 뒤 움직이는 바 차트(Race Bar Chart)를 저장하는 코드예요. bar_chart_race에 대한 인자 설명은 주석으로 대체하겠습니다.

 

import bar_chart_race as bcr

df = bcr.load_dataset('covid19_tutorial')
bcr.bar_chart_race(
        df=df, 
        filename='./covid19.gif', # gif 파일 저장 경로, None인 경우 html 문자열 출력
        orientation='h', # 수평 방향 'h', 수직 방향 'v'
        sort='desc', # 내림차순 'desc', 오름차순 'asc'
        n_bars=8, # 보여줄 막대 개수
        fixed_order=False, # 위에서부터 보여질 라벨 순서
        fixed_max=True, # x축 또는 y축 최대값을 데이터의 최대값으로 고정
        steps_per_period=20, # 화면전환 프레임수 결정 높은 값일 수록 부드럽게 움직임.
        period_length=500, # 주기 조절 높을 수록 느림
        end_period_pause=0, #?
        interpolate_period=False, # 한 프레임당 증가하는 시간을 선형적으로 조절 True
        period_label={'x': .98, 'y': .3, 'ha': 'right', 'va': 'center'}, # 시간 라벨 설정
        period_template='%B %d, %Y', # 시간 라벨 표시 형식
        period_summary_func=lambda v, r: {'x': .98, 'y': .2, 
                                          's': f'Total deaths: {v.sum():,.0f}', 
                                          'ha': 'right', 'size': 11}, # 데이터값 표시 형식
        perpendicular_bar_func='median', # 데이터의 통계값을 수직선으로 표현, 중앙값 : 'median', 평균 : 'mean' etc
        colors='dark12', # 막대기 색상 설정
        title='COVID-19 Deaths by Country', # 제목 타이틀
        bar_size=.95, # 막대 폭(너비) 설정
        bar_textposition='inside', # 데이터값을 막대기 바깥쪽에 표시할지 안쪽에다 표시할지 정한다.
        bar_texttemplate='{x:,.0f}', # 막대 텍스트 표시 형식
        bar_label_font=7, # 막대 라벨 폰트
        tick_label_font=7, # 눈금 라벨 폰트
        tick_template='{x:,.0f}',# 눈금 라벨 표시 형식
        shared_fontdict=None, # 플롯의 모든 텍스트에 대한 공통 형식 지정
        scale='linear', # 눈금 단위 지정, 로그 눈금은 'log'
        fig=None, # matplotlib figure
        writer=None, # 애니메이션 writer 설정
        bar_kwargs={'alpha': .7}, # 막대 투명도, 막대 테두리 설정 etc...
        fig_kwargs={'figsize': (6, 3.5), 'dpi': 144}, # figure 사이즈 및 dpi 설정
        filter_column_colors=True # 화면에 표시되는 막대에만 색상을 적용한다.
)

 

코드를 실행하면 아래와 같이 신기한 Race Bar Chart가 그려진 것을 알 수 있어요.

 


이번 포스팅에서는 신기하고 예쁜 Race Bar Chart(움직이는 바 차트)를 자동으로 만들어주는 bar_char_race 패키지에 대해서 알아보았는데요. 사용법이 쉬워서 알아두시면 많이 써먹을 수 있을 것 같아요.

 

포스팅을 하면서 "세상엔 정말 천재가 많구나"라는 생각에 꽁냥이는 아직 우물 안 개구리라는 생각을 했습니다. 더 분발해야겠어요.

 

지금까지 꽁냥이 글 읽어 주셔서 감사하다는 말씀드리며 이상 포스팅 마치겠습니다. 안녕히 계세요.

 

참고자료

Bar Chart Race 공식 홈페이지 - https://www.dexplo.org/bar_chart_race/

 

Bar Chart Race

Animated bar chart races in Python with the bar_chart_race package

www.dexplo.org

 


댓글


맨 위로