Attention please

막대그래프 그리기(bar, barh) - matplotlib 본문

데이터 시각화/matplotlib

막대그래프 그리기(bar, barh) - matplotlib

Seongmin.C 2022. 10. 8. 13:15
728x90

지금까지 plot과 scatter함수에 대해 알아보았습니다.

 

이번글에서는 bar 함수를 이용하여

막대그래프를 그려보겠습니다.

 

 

 

 

bar 함수에는 다양한 파라미터들이 존재합니다.

 

그 파라미터들을 어떤식으로 설정하면 어떻게 출력되는지

알아보겠습니다.

 

 

 

 

 

 

 

 

 

 

align

fig = plt.figure(figsize = (10, 5), dpi = 100)
axs = fig.subplots(1,2)

data = np.array([5, 25, 50, 20])

axs[0].bar(range(len(data)), data)
axs[1].bar(range(len(data)), data, align='edge')

 

bar함수의 파라미터 중 align을 'edge'로 하게 되면

막대를 기본 x축 위치에서 왼쪽 모서리로 이동시킵니다.

 

기본값은 'center' 이며 x축 위치에 중앙에 위치하도록 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

width

이번에는 bar함수의 파라미터 중 width를 이용하여

막대그래프의 넓이를 조정할 수 있습니다.

 

fig = plt.figure(figsize = (8,4), dpi = 100)
axs = fig.subplots(1,2)

def make_bar(ax, data, w):
    
    ax.bar(range(len(data)), data, width = w)
    ax.set_title(f"width : {w}")

data = np.array([5, 25, 50, 20])
make_bar(axs[0], data, 0.5)
make_bar(axs[1], data, 1)

 

이번에는 따로 make_bar이라는 함수를 지정하여

시각화를 진행하였습니다.

 

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

barh

이번에는 barh 함수에 대해 알아보겠습니다.

 

지금까지의 막대그래프는 세로로 세워져있었습니다.

 

이번에는 옆으로 누워있는 막대그래프를 그리기 위한

barh 함수를 사용해보겠습니다.

 

fig = plt.figure(figsize = (5,5), dpi = 100)
ax = fig.subplots()

data = np.array([5,25,50,20])
ax.barh(range(len(data)), data)

위 코드를 실행시키면 다음과 같은 결과가 출력됩니다.

 

 

 

 

 

 

 

 

 

 

다중 막대차트

이번에는 다중 막대차트를 그려보겠습니다.

 

그리는 방식은 저번 글에서 plot으로 한 Axes에 여러 그래프를 그리는 것처럼

같은 Axes에 bar 함수를 동시에 실행시킵니다.

 

코드로 확인하겠습니다.

 

fig = plt.figure(figsize = (5,5), dpi = 100)
ax = fig.subplots()

data = np.array([[5,25,50,20],[4,27,48,24],[7,23,54,26]])

X = np.arange(4)

ax.bar(X + 0. , data[0], width = 0.25)
ax.bar(X + 0.25 , data[1], width = 0.25)
ax.bar(X + 0.5 , data[2], width = 0.25)

 

위 코드처럼 다중 막대차트를 그리기 위해서는

x좌표를 미리 설정한 후

데이터에 맞게 x좌표를 변경해주어야 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

분할 막대차트

이번 글에서는 분할 막대차트를 그려보겠습니다.

 

이 역시 다중 막대차트처럼 같은 Axes에

여러 bar그림을 그리는 것으로 나타냅니다.

 

fig = plt.figure(figsize = (8,4), dpi = 100)
axs = fig.subplots(1,2)

data = np.array([[20, 10, 25, 30],
                 [10, 13, 8, 9],
                  [4, 6, 5, 6]])

X = np.arange(4)

_=axs[0].bar(X, data[0])
_=axs[0].bar(X, data[1], bottom=data[0])
_=axs[0].bar(X, data[2], bottom=data[0] + data[1])

# for loop로 간단히
for i in range(len(data)):
    _=axs[1].bar(X, data[i], bottom=np.sum(data[:i], axis=0))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

양방향 막대차트

이번에는 양방향 막대차트를 그려보도록 하겠습니다.

 

이 그래프는 두 피처에 대해 비교하기 위해 사용하는

시각화 기법입니다.

 

fig = plt.figure(figsize = (4,4), dpi = 100)
ax = fig.subplots()

W = np.array([35, 25, 20, 40])
M = np.array([30, 15, 30, 45])
X = np.arange(4)

ax.barh(X, W, color = 'r')
ax.barh(X, -M, color = 'b')

양뱡향 막대차트를 그리기 위해 사용하는 함수는

위에서 사용했던 barh 함수입니다.

 

가로로 막대를 그리기 위해 barh 함수를 사용했으며,

양방향을 표현하기 위해 서로 부호를 다르게 조정해주었습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
Comments