막대 그래프
범주에 따른 수치 값을 비교하기에 적합
plot을 여러 개 그리는 방법
한 개의 플롯에 동시에 나타내는 방법
맨 밑의 bar 분포는 파악하기 쉽지만 위에 쌓여있는 bar의 분포는 어려움
.bar()
에선 bottom 파라미터, .barh()
에선 left 파라미터 이용
Percentage Stacked Bar Chart
두 그룹을 겹쳐서 비교
.bar()
에서 alpha 값으로 투명도를 설정해서 그림
세 개 이상의 그룹에선 비교가 힘듦
비교적 구현이 까다로움
실제 값과 그에 표현되는 그래픽으로 표현되는 잉크 양은 비례해야 함
데이터 정렬하기
sort_values()
, sort_index()
사용적절한 공간 활용
복잡함 / 단순함
그 외
fig, axes = plt.subplots(1, 2, figsize=(12, 7))
sharey=True
를 이용해 y축 shareset_ylim()
을 이용해 y limit을 똑같이 고정.bar()
에서 bottom
을 사용해 male의 그래프를 밑에 쌓을 수 있음
bottom=group[’male’]
을 사용해 male의 bar plot을 female 밑에 쌓음fig, ax = plt.subplots(1, 1, figsize=(12, 7))
group = group.sort_index(ascending=False) # 역순 정렬
total=group['male']+group['female'] # 각 그룹별 합
ax.barh(group['male'].index, group['male']/total,
color='royalblue')
ax.barh(group['female'].index, group['female']/total,
left=group['male']/total,
color='tomato')
ax.set_xlim(0, 1)
for s in ['top', 'bottom', 'left', 'right']:
ax.spines[s].set_visible(False)
plt.show()
ax.spines[s].set_visible(False)
set_visible(False)
로 테두리를 없애줌.bar()
의 alpha 값을 조정해 overlapped bar plot 구현x축 조정, width 조정, xticks/xticklabels 테크닉 사용
fig, ax = plt.subplots(1, 1, figsize=(12, 7))
idx = np.arange(len(group['male'].index)) # (0, 1, 2, 3, 4)
width=0.35
ax.bar(idx-width/2, group['male'],
color='royalblue',
width=width, label='Male')
ax.bar(idx+width/2, group['female'],
color='tomato',
width=width, label='Female')
ax.set_xticks(idx)
ax.set_xticklabels(group['male'].index)
ax.legend()
plt.show()
그렇다면 그룹이 N개 일때는 어떻게 하면 될까요?
그룹의 개수에 따라 x좌표는 다음과 같습니다.
2개 : -1/2, +1/2
3개 : -1, 0, +1 (-2/2, 0, +2/2)
4개 : -3/2, -1/2, +1/2, +3/2
규칙이 보이시나요?
−N−12 에서 N−12 까지 분자에 2간격으로 커지는 것이 특징입니다.
그렇다면 index i(zero-index)에 대해서는 다음과 같이 x좌표를 계산할 수 있습니다.
ax.gird(zorder=0)
은 plot에 grid를 추가score_var = student.groupby('gender').std().T
ax.bar(idx-width/2, score['male'],
color='royalblue',
width=width,
label='Male',
yerr=score_var['male'],
capsize=10
)
ax.bar(idx+width/2, score['female'],
color='tomato',
width=width,
label='Female',
yerr=score_var['female'],
capsize=10
)
bar()
에 yerr(y error)을 추가※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※