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

matplotlib 막대그래프 그리기

by 찐남 2022. 2. 25.

이번 포스팅에서는

Matplotlib 라이브러리의 기본 그래프 중에서

막대그래프를 그려 볼게요.

 

지난번 포스팅과 마찬가지로

본격적인 작업에 앞서 기본적인 환경 세팅을 하겠습니다.

① matplotlib 라이브러리 사용 정의

② 그래프에서 환경설정이 가능하도록 폰트 설정

③ 한글 사용이 (-) 부호가 깨지는 현상 방지

 

import matplotlib.pyplot as plt   # matplotlib 라이브러리 load

## 한글 사용 가능하도독 폰트 설정
import matplotlib
matplotlib.rcParams['font.family'] = 'Malgun Gothic'  # os: window 
matplotlib.rcParams['axes.unicode_minus'] = False  # 한글 폰트 사용 시 (-) 부호 깨짐 현상 해결

 

실습을 위해

매우 간단한 데이터를 생성해 볼게요.

x = ['2.21일', '2.22일', '2.23일', '2.24일']   # 15일, 16일, 17일, 18일을 의미
y = [99573, 171452, 170016, 165890]   # 위에 대응되는 날에 대한 코로나 확진자 수 

 

 

막대그래프 그리기

기본 그래프(.bar())

위의 데이터를 이용해서 가장 기본적인 막대그래프를 그려 볼게요.

plt.bar(x, y)  # x: x축, y: y축에 대응되는 데이터

 

다음에는 그래프에 제목(titile)을 달아볼게요.

 

제목 달기(.title())
축 설명 추가(.xlabel() / .ylabel())
x, y축 설명 회전
x축 설명 값을 다른 값으로 변경

위의 내용은 선 그래프 그리기와 동일합니다.

자세한 내용은 아래 포스팅을 참고하세요.

 

 

matplotlib 선 그래프 그리기

Matplotlib 라이브러리는 파이썬에서 그래프를 그릴 때, 가장 많이 사용하는 대표 라이브러리입니다. 이와 관련된 내용이 너무나 많아서, 기본적이고, 핵심적인 내용만 정리하겠습니다. 본격적인

zzinnam.tistory.com

 

기본 옵션 변경하기

 

기본 옵션 변경을 통해

막대 색상, 투명도, 두께, 수평 막대그래프로 

변경이 가능해요.

## 막대 색상 변경
plt.bar(x,y, color = 'green')

## 카테고리별 색상 변경
plt.bar(x,y, color = ['blue','green','yellow','red'])

## 투명도 추가
plt.bar(x,y, color = ['blue','green','yellow','red'], alpha = 0.3)
# 투명도 수치가 작을수록 더 투명해짐

## 막대 두께 조정
plt.bar(x,y, color = ['blue','green','yellow','red'], width = 0.5)

## y축 범위 지정
plt.bar(x,y, color = ['blue','green','yellow','red'])
plt.ylim([min(y) - 10000, max(y) + 10000])

## 수평 막대그래프 그리기
plt.barh(x,y)
plt.xlim(min(y) - 1000, max(y) + 1000)

 

 

막대 채우기 스타일 변경

막대마다 다른 스타일의 모양으로 채우기를 할 수 있어요.

## 막대 채우기 스타일 추가
bar = plt.bar(x,y)
bar[0].set_hatch('/')
bar[1].set_hatch('x')
bar[2].set_hatch('..')
bar[3].set_hatch('+')

텍스트 삽입

 

막대 높이를 나타내는 텍스를 추가할 수 있어요.

원리는 그래프 안에서 x, y 좌표 값을 이용해서 하는 건데요.

 

원리를 이해하면, 

가장 높은(낮은) 막대그래프의 텍스트 스타일만

변경할 수도 있어요.

## 막대 높이를 나타내는 텍스트 추가
plt.bar(x,y)
plt.ylim([min(y) - 10000, max(y) + 30000])

for i, txt in enumerate(y) : 
    plt.text(i, txt + 1000, txt, ha = 'center', color = 'blue') 



## 가장 높은 막대그래프만 별도 스타일 지정하기
plt.bar(x,y)
plt.ylim([min(y) - 10000, max(y) + 30000])
for i, txt in enumerate(y) :
    if txt == max(y):
        plt.text(i, txt + 1500, txt, ha = 'center', color = 'red', size = 20)
    else:
        plt.text(i, txt + 1500, txt, ha = 'center')

 

누적 막대그래프

다음은 누적 막대그래프를 그려 볼게요.

누적 막대그래프는 위에 있는 예제 데이터로는

설명하기가 조금 어렵고요.

그래서 붓꽃 데이터를 활용해서 그려 볼게요.

아래 데이터를 다운로드하시고요.

 

iris.csv
0.00MB

 

## 누적 막대그래프 그리기
## iris data 가져오기
irisData = pd.read_csv("C:/iris.csv")

## 붓꽃 종류별 평균 SepalLength SepalWidth PetalLength PetalWidth 구하기
df = irisData.groupby('Species').mean()

## 붓꽃 종류별 평균 SepalLength와 SepalWidth 나타내기
plt.bar(df.index, df['SepalLength'])
plt.bar(df.index, df['SepalWidth'], bottom = df['SepalLength'])

## 붓꽃 종류별 평균 SepalLength와 SepalWidth 나타내기
## 범례 추가
plt.bar(df.index, df['SepalLength'], label = 'SepalLength')
plt.bar(df.index, df['SepalWidth'], bottom = df['SepalLength'], label = 'SepalWidth')
plt.ylim([2, 12])
plt.legend(ncol = 2)

 

 

다중 막대그래프 그리기

끝으로 다중 막대그래프를 그려 볼게요.

원리는 각 막대의 위치를 변경하고,

막대 폭을 조정해서 최종 그리게 됩니다.

## 다중 막대그래프 그리기
import numpy as np
index = np.arange(len(df.index))
plt.bar(index - 0.15, df['SepalLength'], width = 0.3, label = 'SepalLength')
plt.bar(index + 0.15, df['SepalWidth'], width = 0.3, label = 'SepalWidth')
plt.ylim([2,8])
plt.legend()
plt.xticks(index, df.index)

 

이상 막대그래프 그리기에 대해서

알아보았는데요.

 

다음 포스팅에서는 원 그래프 그리기에 대해서

알아보겠습니다. 

 

 

반응형

댓글