본문 바로가기
Python/Matplotlib

파이썬에서 막대그래프(bar graph, 바차트)의 작성법 - matplotlib(19)

by 콩돌 2019. 5. 23.
반응형

파이썬 버전 3.7 기준

matplotlib 버전 3.1.0 기준



  파이썬에서 막대그래프(bar chart, 바차트)의 작성법


본 포스팅에서는 bar()함수의 작성법에 대한 설명과 막대그래프(bar chart, 바차트)을 직접 작성하는 예제를 다뤄보도록 한다.

bar()함수의 입력 인자에 대한 상세 설명은 다음포스팅(링크)를 참고하도록한다.


막대그래프는 사용자 필요에 따라 사용이 가능한 color, edgecolor, linewidth, xerr, yerr등의 키워드 인자는 스칼라 혹은 스칼라의 시퀀스가 입력이 가능하다. 

이는 모든 막대를 한번에 제어하거나 혹은 각 막대마다 다르게 설정이 가능하게 된다. 

이를 응용한다면 막대그래프의 활용도는 주식에서 사용하는 캔들차트나, stacked bar chart 등을 만들 수 있다. 



  막대그래프(bar chart)의 작성 방법


본 포스팅에서는 세로 막대그래프를 그리는 것을 기준으로 한다. 

가로 막대그래프는 bash()함수를 사용하는데 bar()함수와 사용법이 거의 동일하다.

  - 몇몇 입력 키워드 인자(y, width, height, left)가 다른 것 외에는 큰 차이가 없다. 

  - 상세 내용은 matplotlib의 공식 홈페이지를 참고할 수 있으며 위의 bash()에 링크를 걸어두었다.


  막대그래프의 단순한 작성 형식

먼저 단순하게 막대그래프의 작성형식을 설명하자면 아래와 같다.


작성 형식)

barcontainer=bar(x, height, width=0.8, bottom=None, align='center')


(필수 입력)

  - 스칼라(scalar)의 시퀀스를 입력받는다.

  - 데이터를 넣고자 하는 x축 위치를 설정한다.


height (필수 입력)

  - 하나의 스칼라(scalar)나 스칼라의 시퀀스를 입력받는다.

    + 하나의 스칼라를 입력 받을 경우 모든 막대의 높이는 같다.

    + 스칼라의 시퀀스를 입력 받을 경우 각각의 막대에 다른 높이를 설정할 수 있으며, x와 형상이 같아야한다.

  - 데이터를 넣고자 하는 막대의 높이를 설정한다.


width

  - 하나의 스칼라(scalar)나 스칼라의 시퀀스를 입력받는다.

    + 하나의 스칼라냐, 스칼라의 시퀀스냐에 따른 거동은 height와 같다.

  - 막대의 너비(width)를 설정한다.
  - 기본값은 0.8이다.

bottom

  - 하나의 스칼라(scalar)나 스칼라의 시퀀스를 입력받는다.

    + 하나의 스칼라냐, 스칼라의 시퀀스냐에 따른 거동은 height와 같다.

  - 데이터를 넣고자 하는 막대의 바닥 부분의 y축 위치를 설정한다.

  - 기본값은 None이며 이 경우 바닥 위치는 0이다.


align

  - 막대(bar)의 x축 좌표에서 정렬을 수행한다.

  - 아래의 문자열이 입력 가능하다.
    + 'center' : 막대의 기본 x축 위치에서 중앙에 위치하도록 한다.
    + 'edge' :  막대의 기본 x축 위치에서 왼쪽 모서리로 막대를 이동시킨다.
  - 막대의 오른쪽으로 정렬하기 위해서는 align은 'edge'로 입력하고 width에 입력되는 값을 음수(-)로 입력하면 된다.

  - 기본값은 'center'이다.



  막대그래프의 단순한 작성 예제

막대그래프 작성 함수인 bar()와 입력 키워드 인자에 대해서는 다음 포스팅(링크)에 자세히 설명하였다.

이 섹션에서는 단순하게 히스토그램을 작성해보는 스크립트 예제를 작성해본다. 


먼저 X는 0에서 num-1으로 설정된 변수까지 1씩 증가시켜 형성되게 하였다.

H에는 1에서 num*2까지 존재하는 정수 num개를 랜덤하게 추출하게 설정하였다.


막대그래프를 그리기 위해서 bar()함수를 사용하였으며, x축에는 X를 y축 값(막대의 높이)는 H를 입력하였다.

bottom은 바닥에서 띄어지는 것을 보여주기 위해 2로 설정해놓았다. 

align는 'edge'로 두어 기존 바의 위치에서 왼쪽으로 위치하게 설정하였다. 

그 외에 color, edgecolor, linewidth등을 활용하여 막대를 보기 좋게 편집하였다. 


x축과 y축의 범위는 강제로 설정하지 않으면 자동으로 위치를 설정하기 때문에 x,ylim() 함수를 통해 고정해 두었다.


그외에 다양한 함수들을 적용하여 틱이나 x,y축 라벨링을 통해 플롯을 보기좋게 꾸몄는데 다양한 함수들에 대한 설명은 선행 포스팅(링크)를 참고하도록한다.  


작성 예제) bar_ex.py

import matplotlib.pyplot as plt

import numpy as np


# 입력 데이터

num = 10

X = np.arange(num)

H = np.random.randint(1, num*2, num)


# plot 입력

bar_graph= plt.bar(X, H, width=0.5, bottom=2, align='edge', label='A',

                color='r', edgecolor='black', linewidth=1.2)


# X 및 Y 범위 설정

plt.xlim(-0.5, num)

plt.ylim(0, num*2+1+2)


# 그래프의 타이틀과 x,y축 라벨링

plt.title('bar chart', pad=10)

plt.xlabel('X axis', labelpad=10)

plt.ylabel('Y axis', labelpad=10)


# 틱설정

plt.minorticks_on()

plt.tick_params(axis='both', which='both', direction='in', pad=8, top=True, right=True)


# 플롯 출력

plt.show()




 


 

 

 참고자료

  https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py

  https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html#matplotlib.pyplot.bar

 





반응형

댓글