안녕하세요. JGP입니다.
이번 시간에는 matplotlib에서 그래프를 조금 더 디테일하게 디자인 할 수 있는 옵션들에 대해 알아보도록 하겠습니다.
| 전체 예제 코드
import calendar
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()
barcharts = ax.bar(month_list, sold_list)
ax.set_xticks(month_list, calendar.month_name[1:13], rotation=90)
for rect in barcharts:
height = rect.get_height()
ax.text(rect.get_x() + rect.get_width()/2., 1.002*height,'%d' % int(height), ha='center', va='bottom')
plt.show()
지난 포스팅에서 그렸던 막대그래프에 이것 저것 덧붙여보았습니다.
한눈에 판매량 수치를 파악하기 힘들고, X축의 label도 제대로 표기되지 않아 한 눈에 정보를 알기 어려웠지요.
이번에는 손쉽게 label을 붙이기 위해 calendar 라이브러리를 불러와 month_name 메서드를 사용하였습니다.
또한 각 막대 위에는 해당 월의 판매량이 텍스트로 표시됩니다.
그럼 이제 코드를 한 줄씩 뜯어볼까요?
| barcharts
barcharts = ax.bar(month_list, sold_list)
이번에는 ax.bar() 형태로만 구현하지 않고, 앞에 'barcharts'라는 변수를 추가하여 해당 변수에 막대 데이터를 담아보았습니다.
이렇게 하면 하위에 for문을 통한 반복 시에 막대 상단의 좌표를 계산하여 적절히 수치를 텍스트로 표기할 수 있습니다.
막대 상단에 수치를 표기하는 방법에 대해서는 하위에서 다룹니다.
| ax.set_xticks()
ax.set_xticks(month_list, calendar.month_name[1:13], rotation=90)
- ax.set_xticks() 메서드는 X 축에 눈금을 설정하는 Matplotlib의 함수입니다.
- 이 함수는 그래프의 X 축에 어떤 위치에 눈금을 표시할지를 지정합니다.
- 첫 번째 인자에 month_list를 입력했으므로 month_list 리스트에 저장된 각 값을 X축의 눈금에 설정했을 것입니다.
- 두 번째 인자에 calendar,month_name[1:13]을 입력함으로서 1월부터 12월까지 영문 월 표기 형식을 대입하여 줍니다.
- 세 번째 인자에 rotation=90을 입력함으로서 X축 눈금에 적히는 label이 90도 돌아간 형태로 표기되어 가독성을 높입니다.
| for rect in barcharts: ~~
for rect in barcharts:
height = rect.get_height()
ax.text(rect.get_x() + rect.get_width()/2., 1.002*height,'%d' % int(height), ha='center', va='bottom')
- 위 코드는 barcharts에 저장된 각 막대에 대해 반복문을 실행합니다.
- 각 막대의 높이는 rect.get_height()를 통해 가져오고, 이 값을 이용하여 텍스트를 막대 위에 표시합니다.
- 텍스트의 x 좌표는 rect.get_x() + rect.get_width() / 2.로 계산되어 막대의 중앙에 위치하게 됩니다.
- y 좌표는 1.002 * height로 계산되어 막대의 높이보다 조금 위에 위치하게 됩니다.
- 마지막으로 ax.text() 함수를 사용하여 텍스트를 표시합니다.
- ha='center'와 va='bottom'는 각각 가로 방향과 세로 방향으로 텍스트를 중앙 정렬하고 아래쪽 정렬하도록 지정합니다.
- 이를 통해 막대의 중앙 위에 해당하는 값이 표시되게 됩니다.