보통날의/데이터 시각화 공부

실무에서 바로 써먹을 데이터 분석 - 시각화(2) 병렬 막대차트

알 수 없는 사용자 2020. 7. 31. 23:19

7월 30일자 한국경제에 실린 기사 삼성 "3분기도 나쁘지 않다"…게임기용 D램·중저가폰이 '기대주'

 

삼성 "3분기도 나쁘지 않다"…게임기용 D램·중저가폰이 '기대주'

“1분기 실적 발표 때 신종 코로나바이러스 감염증(코로나19)이 ‘디지털 전환’의 변곡점이 될 것이라고 강조했습니다. 하반기에도 이런 흐름이 이어질 것입니다.” 한진만 삼성전자 DS부문 전�

news.naver.com

이 기사에 나오는 삼성전자 영업이익 그래프를 Python, Matplotlib을 통해 그려보았다

구체적인 소스코드는 아래 참고

# 삼성전자의 영업이익 데이터 
data = {
    '2019년 2분기':[7100,15600,34000,7500],
    '2020년 2분기':[7300,19500,54300,3000]
}
plot_data = pd.DataFrame(data,index=['CE(소비자가전)','IM(정보기술&모바일)',
                                    '반도체','디스플레이'])
# 그래프에 전반적으로 사용되는 컬러 정의 
# #898989는 회색, #004098은 파란톤 
face_color = '#F6F2DF'
bar_colors = ['#898989','#004098']
# 그래프 그리기, 사이즈는 넓직하게 
fig = plt.figure(figsize=(10,3),facecolor=face_color)
ax = fig.add_subplot(1,1,1)

# 본격 그래프 그리기  
widths = [-0.4,0.4]
x_lbl = plot_data.index
x = np.arange(len(x_lbl))
for count,col in enumerate(plot_data.columns):
    y = plot_data[col]
    #두 개의 바차트를 그리기 위해서는 겹치지 않게 x축 위치를 설정하는 것이 중요하다 
    ax.bar(x+widths[count]/2,y,
           width=widths[0],
          color=bar_colors[count],
          label=col)
    # 데이터 레이블 추가는 텍스트 하나씩 하나씩 진행되는 것임을 명심할 것!! 
    for x1,y1 in zip(x,y):
        ax.annotate(y1,xy=(x1+widths[count]/2,y1+2000),
                   ha='center',fontweight='bold',
                   fontsize=13)

## 그래프 꾸미기
## 데이터 레이블을 추가하면 subplot 밖으로 나가기 때문에 ylim 범위를 확장 
ax.set_ylim(0,y.max()*1.1)
## subplot의 테두리 지우기 
for side in ['left','right','top']:
    ax.spines[side].set_visible(False)
# 테두리와 틱 그리고 y축의 라벨 지우기 
plt.tick_params(axis='both',which='both',bottom=False,left=False)
ax.set_yticklabels([])
# x축 설정 
ax.set_xticks(x)
ax.set_xticklabels(x_lbl,fontsize=15)
# 그래프에 데이터 라벨 더하기 
ax.legend(prop={'size':15},loc=1,
         facecolor=face_color,edgecolor=face_color)
# 배경색 지정 
ax.set_facecolor(face_color)
# 타이틀 넣기
title = '삼성전자 사업부문별 영업이익'
ax.set_title(title,fontsize=20,fontweight='bold',loc='left')
# 기타 문구 넣기 
ax.text(-0.1,56000,'(단위 : 억원)',ha='right',fontsize=13)
ax.text(3,-13000,'자료:삼성전자',ha='left',fontsize=13)

plt.show()