파이썬/시각화 matplot

데이터의 크기를 비교하는 막대그래프

Merware 2023. 5. 16. 09:35

[학습목표]
막대그래프를 그리고, 막대그래프의 여러가지 옵션을 지정할 수 있다.

import pandas as pd
import matplotlib.pyplot as plt
# 그래프에 한글 설정
plt.rc('font',family='Malgun Gothic')

# 그래프에 마이너스 기호 깨지는 문제 해결
plt.rcParams['axes.unicode_minus'] = False

 

샘플데이터

  • 어느 두 매장의 요일별 평균 매출액
df1 = pd.DataFrame({'요일':['월','화','수','목','금','토','일'], 
                   '매출액':[10000,9000,11000,8000,13000,15000,14000]})
df1

"""
	요일	매출액
0	월	10000
1	화	9000
2	수	11000
3	목	8000
4	금	13000
5	토	15000
6	일	14000
"""

df2 = pd.DataFrame({'요일':['월','화','수','목','금','토','일'], 
                   '매출액':[9000,9500,13000,7000,12000,14000,11000]})
df2

"""
요일	매출액
0	월	9000
1	화	9500
2	수	13000
3	목	7000
4	금	12000
5	토	14000
6	일	11000

 

막대그래프

  • plt.bar(x축데이터,y축데이터)
  • plt.barh(x축데이터,y축데이터)

세로 막대 그래프

plt.bar(df1['요일'],df1['매출액'])

 

가로 막대 그래프

plt.barh(df1['요일'],df1['매출액'])

 

막대 폭 지정

세로 막대 그래프

  • width = 0~1사이의 실수(default:0.8)
plt.bar(df1['요일'],df1['매출액'], width=0.4)

 

가로막대 그래프

  • height = 0~1사이의 실수(default:0.8)
plt.barh(df1['요일'],df1['매출액'],height=0.4)

 

막대 색상 지정

plt.bar(df1['요일'],df1['매출액'], width=0.4, color='r')

 

막대마다 다른 색 지정

  • ['r','orange','y','g','b','navy','violet']
plt.bar(df1['요일'],df1['매출액'], width=0.4, color=['r','orange','y','g','b','navy','violet'])

 

막대 테두리

  • edgecolor = 테두리 색상
  • linewidth = 테두리 두께
plt.bar(df1['요일'],df1['매출액'], width=0.4, color=['r','orange','y','g','b','navy','violet']
       ,edgecolor='gray',linewidth=2)

 

막대 패턴 지정하기

막대에 패턴 지정

  • hatch 파라미터에 기호 전달 : '/', '', '|', '-', '+', 'x', 'o', 'O', '.', '*'
plt.bar(df1['요일'],df1['매출액'], width=0.4, color=['r','orange','y','g','b','navy','violet']
       ,edgecolor='gray',linewidth=2,hatch='x')

 

패턴의 밀도 지정

  • 패턴기호의 개수로 밀도를 조정한다.
plt.bar(df1['요일'],df1['매출액'], width=0.4, color=['r','orange','y','g','b','navy','violet']
       ,edgecolor='gray',linewidth=2,hatch='xx')

막대마다 다른 패턴 지정

  • 막대그래프를 객체로 받는다.
  • 막대마다 다른 패턴을 지정한다.
  • set_hatch(기호)
bars = plt.bar(df1['요일'],df1['매출액'], width=0.4, color=['r','orange','y','g','b','navy','violet']
       ,edgecolor='gray',linewidth=2)

bars[0].set_hatch('.')
bars[1].set_hatch('/')
bars[2].set_hatch('+')
bars[3].set_hatch('-')
bars[4].set_hatch('*')
bars[5].set_hatch('|')
bars[6].set_hatch('o')

 

막대 위치 지정

align = center/edge

  • 디폴트: center
  • edge로 지정하면 막대의 왼쪽 끝과 틱을 맞춘다.
  • 막대의 오른쪽 끝과 틱을 맞추려면 width를 음수로 지정한다.
plt.bar(df1['요일'],df1['매출액'], width=0.4, align='edge')
plt.bar(df1['요일'],df1['매출액'], width=-0.4, align='edge')

 

두 개의 막대그래프 비교하기

df1

"""
	요일	매출액
0	월	10000
1	화	9000
2	수	11000
3	목	8000
4	금	13000
5	토	15000
6	일	14000
"""

df2

"""
	요일	매출액
0	월	9000
1	화	9500
2	수	13000
3	목	7000
4	금	12000
5	토	14000
6	일	11000
plt.bar(df1['요일'],df1['매출액'], width=-0.4, align='edge')
plt.bar(df2['요일'],df2['매출액'], width=0.4, align='edge')
plt.title('두 매장의 요일별 매출액 평균', size=15)
plt.grid(axis='y', ls=':')

plt.barh(df1['요일'],df1['매출액'], height=-0.4, align='edge')
plt.barh(df2['요일'],df2['매출액'], height=0.4, align='edge')
plt.title('두 매장의 요일별 매출액 평균', size=15)
plt.grid(axis='x', ls=':')