plot.bar()와 plot.barh()는 각각
막대그래프와 수평 막대그래프를 그린다. (h는 horizontal의 머릿글자인 듯?)
이 경우, Series나 DataFrame의 색인은
막대그래프의 경우에는 x눈금, 수평 막대그래프의 경우에는 y눈금으로 사용된다. 예를 들어,
같은 data를 놓고 그냥 막대그래프와 수평 막대그래프를 그린 결과다.
index가 막대그래프에서는 원점부터 오른쪽으로 순서대로 쌓이고,
수평 막대그래프에서는 원점부터 위로 순서대로 쌓인다는 점도 특징.
DataFrame에서 막대그래프는
각 행의 값을 함께 묶어서 하나의 그룹마다 각각의 막대를 보여준다. 즉,
이렇게 생긴 df에 대해 막대그래프를 그리면
이렇게 된다.
여기서는 인덱스의 열 이름 Genus가 범례의 제목으로 사용되었다.
누적 막대그래프를 그리려면 stacked=True 옵션을 bar나 barh에 주면 되는데,
각 행의 값들이 하나의 막대에 누적되어 출력된다.
수평 막대그래프로 표현하고 싶다면
이렇게 하면 된다.
막대그래프를 그릴 때 유용한 팁 중 하나는
Series의 value_counts().plot.bar()를 이용해서
값의 빈도를 시각화하는 것이다.
이제 레스토랑의 팁 데이터셋 예제를 살펴보면서
요일별로 열린 파티의 갯수를 계산하고, 파티 갯수 대비 팁 비율을 보여주는 누적 막대그래프를 그려보자.
먼저 read_csv로 데이터를 불러오고,
crosstab 함수를 써서 day와 size 두 개의 열로부터 간단한 빈도표를 뽑았다.
이제 요일 순서대로 그래프를 그려야 하니
reindex를 써서 목요일 ~ 일요일 순으로 인덱스를 재정렬한 뒤
파티 인원이 한 명이거나 여섯 명인 경우는
데이터에서 많지 않으므로 제거했다. (이상치로 판단했다는 말)
이제 각 행의 합이 1이 되도록 정규화하고 누적그래프를 그려보면
주말로 갈수록 3인 이상이 모이는 파티의 비중이
커지는 경향이 있음을 확인할 수 있다.
그래프를 그리기 전에 요약이 필요한 데이터에는
시본Seaborn 패키지를 사용하면 간단하게 처리할 수 있다.
이번에는 시본을 이용해 팁 데이터 그래프를 다시 그려보자.
먼저 tips 데이터에 tip_pct라는 컬럼을 신규로 추가한다.
tip_pct는 '전체 지불한 금액에서 팁을 제외한 액수' 중 팁이 차지하는 비중을 뜻한다.
그리고 시본을 써서 그래프를 그린 결과는 위와 같다.
시본 그래프 함수의 data 인수에는 판다스의 DataFrame이 들어간다.
다른 인수들은 해당 데이터프레임의 열 이름들을 참조한다.
day열의 각 값에 대한 데이터는 여러 개 존재하므로
tip_pct에 대한 막대그래프는 평균값으로 그려진다.
막대그래프 위에 겹쳐져 그려져 있는 검은 선은 95%의 신뢰구간을 나타내고, 이 값은 옵션 인수로 설정이 가능하다.
seaborn.barplot 메서드의 hue 옵션을 이용해
추가 분류에 따른 그래프도 그릴 수 있다.
시본 라이브러리는 기본 색상표, 그래프 배경,
그리드 선 색상 등의 꾸밈새를 자동으로 변경한다.
seaborn.set_style 메서드로 변경할 수 있다. 예를 들면
whitegrid를 적용한 다음 그래프를 다시 그려보면
위에서는 적용되지 않았던 그리드가 그려져 있음을 볼 수 있다.
set_palette를 사용하면 색상표를 바꾸는 것도 가능하다 (e.g. Greys_r)