2024. 1. 10. 13:35ㆍ시각화
많은 시각화의 방법중에서 막대그래프를 그려보려고합니다. 막대그래프는 각 막대의 길이를 통해서 데이터의 상대적인 크기를 비교할 수 있으며 시계열 데이터에서도 시간별로 데이터의 추세,패턴 등을 쉽게 파악할 수 있는 장점이 있습니다.
1. matplotlib
matplotlib로 막대그래프를 그리는 방법은 기본적으로 plt.bar(xaxis,yaxis)의 형태를 띄웁니다.
month_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
sold_list = [300, 400, 550, 900, 600, 960, 900, 910, 800, 700, 550, 450]
fig, ax=plt.subplots(figsize=(15,5))
ax.bar(month_list,sold_list)
plt.show()
기본적인 그래프는 이렇게 나오지만 데이터를 모르는 사람이 이 그래프를 보고 알 수 있는것은 6이라는 숫자가 가장 크다정도 밖에 없습니다. 생산성이 나오는 결과는 아닙니다. 그럼 이 데이터에서 어떤 결과를 보여주고 싶다면 제목과 데이터의 x축은 무엇을 나타내고 y축은 무엇을 나타내는지 표시할 필요가 있습니다. 그리기 위해서는 plt.set_x(or y)label(' ')과 plt.set_title(' ')을 통해서 추가가 가능합니다.
fig, ax=plt.subplots(figsize=(15,5))
ax.bar(month_list,sold_list)
ax.set_xlabel('Month')
ax.set_ylabel('Sales rate')
ax.set_title('monthly sales volume')
plt.show()
이 그래프가 무엇을 나타내는 지 데이터를 보지않고 이해하는 것이 가능해졌습니다. 이제 이 그래프를 보는 이용자들의 편의성을 위한 코드들을 추가해봅니다.
import calendar
fig, ax=plt.subplots(figsize=(15,5))
barchart=ax.bar(month_list,sold_list,label='sold',color='skyblue')
ax.legend()
ax.set_xlabel('Month')
ax.set_ylabel('Sales rate')
ax.set_title('monthly sales volume')
ax.set_xticks(month_list,calendar.month_name[1:13],rotation=0)
for ract in barchart:
height=ract.get_height()
x=ract.get_x()
width=ract.get_width()
ax.text(x+width/2,1.002*height,'%d'%int(height),ha='center',va='bottom')
plt.show()
코드 설명을 하면 일단 캘린더라는 라이브러리를 불러와서 라이브러리에 저장되어있는 각 월들의 이름을 set_xticks를 통해서 넣어주었습니다. 그리고 그래프를 그리는 plt.bar()부분에서 label의 이름, 막대의 색깔을 지정해주었으며, 라벨은 plt.legend()를 통해서 오른쪽 상단에 표시하도록 했습니다. 가장 어려운 부분은 각 막대의 수치를 막대 위에 표기하는 것인데 텍스트를 넣는법은 plt.text()를 통해 가능하지만 위치를 잡아주는 것이 중요합니다. 그래프를 ract라는 변수에 넣고 get_x(), get_height(), get_width()를 하면 각 막대들의 정보를 얻습니다. 각각 왼쪽 변의 좌표 높이의 좌표 너비의 정보가 담겨있습니다.
2.seaborn
seaborn에서 막대그래프를 그리는 기본적인 방법은 sns.barplot(x=data,y=data)입니다.
df=pd.DataFrame({
'month' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
'sold' : [300, 400, 550, 900, 600, 960, 900, 910, 800, 700, 550, 450]
})
fig, ax=plt.subplots(figsize=(15,5))
barcharts=sns.barplot(x='month',y='sold',data=df)
plt.show()
seaborn은 기본적으로 x축과 y축의 라벨이 달려있고 색상도 각각 다 다르게 나타납니다. 그리고 위와 비슷하게 만들기 위해서도 비슷한 맥락을 가지고 코드를 짜게 됩니다.
fig, ax=plt.subplots(figsize=(15,5))
barcharts=sns.barplot(x='month',y='sold',data=df)
plt.title('monthly sales volume')
for p in ax.patches:
ax.text(p.get_x() + (p.get_width()/2) , # 가로 위치
p.get_y() + p.get_height(), # 세로 위치
f"{p.get_height():.2f}", # 값 + 표시방법 소수 둘째자리까지
ha = 'center' )
plt.show()
'시각화' 카테고리의 다른 글
[시각화] plotly line (0) | 2024.02.03 |
---|---|
[시각화] plotly bar chart (0) | 2024.01.30 |
[시각화] plotly 기초 (0) | 2024.01.11 |
[시각화] matplotlib, seaborn 라이브러리 비교 (0) | 2024.01.08 |