ㅅㅇ

matplotlib_ 02_3 각종 그래프 그리기 _ 막대그래프(Bar plot) 본문

AI_STUDY/데이터 시각화 Matplotlib Seaborn Pandas

matplotlib_ 02_3 각종 그래프 그리기 _ 막대그래프(Bar plot)

SO__OS 2022. 6. 16. 12:20
플레이데이터 빅데이터캠프 공부 내용 _ 6/16

Pandas_ 02_3 각종 그래프 그리기 _ 막대그래프(Bar plot)

1. 막대그래프(Bar plot)

- 수량을 막대 형식으로 나타낸 그래프 
      - 수량을 표현할 때 사용. (ex. 범주형컬럼의 value_counts() 각 범주별 수량 갯수 ) 

1) 수직막대 : bar(x, height) 메소드 사용
    - x: x값                        - >  분류값(수량을 셀대상)
    - height:  막대 높이     - >  개수 수량
2) 수평막대 : barh(y, width) 메소드
    - 1번인수 :  y값           - >  분류값(수량을 셀 대상)
    - 2번인수: 막대 너비   - >  개수 수량

 

2. 막대그래프(Bar plot) 그리기

수직    .bar (대상 x, 수량 y, [width = 0~1] )   

수평    .barh(대상 y, 수량 x,  [hight = 0~1] )

 

- 막대 두께 조절

    기본값 0.8   /   1이면 막대끼리 붙어버린다.

    수평  :   width = 0~1 실수,      수직   :   hight = 0~1 실수

 

# 수직막대 그래프
plt.figure(figsize = (15,7))
plt.subplot(1,2,1)
plt.bar(fruits, counts, width=1)  # (대상 x, 수량 y, width)

plt.title('수직막대그래프')
plt.xlabel('과일')
plt.ylabel('수량')

# 수평막대 그래프
plt.subplot(1,2,2)
plt.barh(fruits, counts, height = 0.5) # (대상 y, 수량 x, hight)
plt.title('수평막대그래프')
plt.xlabel('수량')
plt.ylabel('과일')

plt.show()

 

3. 막대그래프(Bar plot) 활용

  pandas '강수량 추이 ' 데이터 프레임 을  막대그래프로 그리기

 

- 전처리

import pandas as pd

df = pd.read_excel('data/강수량.xlsx')

# 계절 컬럼을 현재 분석할 일 없다. - >  작업에 맞게 처리해주자.
# 계절 컬럼을 index로 빼주기
df.set_index('계절', inplace = True)
df

위 데이터프레임을 가지고 막대그래프을 그려볼 것이다.

 

1) 데이터레이블

- 막대 위에 수량값을 text 로 출력
    - x좌표 :    0, 1, 2, 3
    - y좌표 :   수량,  값

- 반복문 enumerate 사용하기

- x좌표 y좌표의 값은    x축과 y축의 tick 간격 비율에 따라 다르다.  

     - > 비율에 따라 맞춰서 보기 좋은 좌표값으로 설정해주기.

 

# 2009년 계절별 강수량 비교

plt.figure(figsize = (7,7))
plt.bar(df.index, df[2009])

for i, j in enumerate(df[2009]): # 값을 반복문 돌려서
    plt.text(i-0.1, j+10, j)
    
plt.ylim(0, 850) # y축의 값의 범위를 지정   
    
plt.grid(True)
plt.show()

2009년 계절별 강수량 비교

 

2) 데이터프레임 통계값을 그래프로 표현해보기

 

막대그래프는 대상과 수량만 잘 생각해서 작성해주면 된다.

 

- 통계의 결과 : mean_rain Series  ( round(df.mean(axis=1),2) )

   대상 : mean_rain Series의 index
   수량 : mean_rain Seires의 values

# 계절별 평균 강수량을 비교

mean_rain = round(df.mean(axis=1),2)

plt.bar(mean_rain.index, mean_rain.values)

plt.title('계절별 평균 강수량', fontsize = 20)
plt.xlabel('평균 강수량')
plt.ylabel('계절')

plt.grid(True)
plt.ylim(0,800)

for i,j in enumerate(mean_rain.values):
    plt.text(i-0.15, j+10, j)

plt.show()