본문 바로가기
파이썬. 데이터분석/데이터분석 실습

matplotlib : 막대그래프와 꺾은선그래프 동시에 그리기(twinx)

by 한국수달보호협회장 2022. 7. 16.

 

https://www.youtube.com/watch?v=PjhlUzp_cU0 

 

나도코딩 데이터분석 마지막파트 여기서 배운것들을 토대로 좀 더 찾아서 추가함

 

 

stateless 방식

ax1.legend(bbox_to_anchor=(1, 0.9),fontsize=18) - legend 상세한 위치설정

ax1.yaxis.set_label_coords(0, 1) - y축label 상세한 위치설정

 

ax1과 ax2 둘다 legend를 띄우면 겹쳐있어서 ax1(출생아 수)의 legend위치를 바꿨다

 

ax2 = ax1.twinx() 뜻 : ax2는 ax1와 같은 축을 공유한다.

fig, ax1 = plt.subplots(figsize=(12,7))
ax1.bar(df.index, df['출생아 수'], label='출생아 수', color='orange')
ax1.set_ylabel('출생아 수 (천명)', rotation=0)
ax1.yaxis.set_label_coords(0, 1)
ax1.legend(bbox_to_anchor=(1, 0.9),fontsize=18) # legend 위치 상세
ax1.set_ylim(250, 700)
ax1.set_yticks([300, 400, 500, 600])

for idx, val in enumerate(df['출생아 수']):
    ax1.text(idx, val+15, val, ha='center',color='grey')

ax2 = ax1.twinx()
ax2.plot(df.index, df['합계 출산율'], color='crimson', label='합계 출산율', marker='o' , ms=14, mec='w', mew=3)
ax2.set_ylabel('합계 출산율', rotation=0)
ax2.yaxis.set_label_coords(1.05, 1.07)
ax2.set_ylim(0, 1.5)
ax2.set_yticks([0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4])

for idx, val in enumerate(df['합계 출산율']):
    ax2.text(idx, val+0.1, val, ha='center',color='red')
    
ax2.legend(fontsize=18)
plt.show()