메인 콘텐츠로 이동하기
  1. 블로그 글/

파이썬 - Matplotlib 텍스트 삽입

·2 분

본 글은 파이썬 내 matplotlib 라이브러리 사용 중 그래프에 텍스트를 삽입하기 위한 방법을 설명하기 위해 작성되었습니다.

matplotlib을 활용하여 그래프를 출력할 때, 아래와 같이 그래프 위에 텍스트를 삽입해 보도록 하겠습니다.

Alt text

우선 아래와 같이 임의의 월별 판매 수량의 데이터를 가지고 구현하도록 하겠습니다.

>>> 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)

# calendar.month_name[1:13] → xlabel에 January부터 December까지 출력
>>> ax.set_xticks(month_list, calendar.month_name[1:13], rotation=90)

>>> print(barcharts)

코드를 실행하면, 아래와 같은 그래프가 출력됩니다.

Alt text

다음으로, 각 bar 위에 해당하는 y값을 삽입하도록 하겠습니다.

각 bar의 값을 구한 뒤, 텍스트로 삽입하기 위해서는 y값을 출력하는 get_height()와 bar에 텍스트를 입력하는 ax.text()를 사용합니다.

참조:

get_height()

https://matplotlib.org/stable/api/_as_gen/matplotlib.patches.Rectangle.html

ax.text()

https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text

완성된 코드는 다음과 같습니다.

>>> 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)

>>> print(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')
    
>>> plt.show()

rect.get_x() + rect.get_width()/2.

각 막대의 x 위치와 너비의 중간 지점을 계산합니다. 이는 막대의 가로축 중심을 나타냅니다.

1.002 * height

height는 현재 막대의 높이이며, 1.002*height는 막대의 높이보다 조금 더 위에 텍스트를 배치하도록 하는 보정 값입니다.

’% d’ % int(height)

문자열 포매팅 즉, 각 막대별 높잇값 삽입 (% 뒤에 오는 d(정수)를 삽입, int(height) 막대의 높이를 정수로 변환)

ha=‘center’

가로 (x 축) 정렬을 중앙에 맞춥니다.

va=‘bottom’

세로 (y 축) 정렬을 아래에 맞춥니다.

따라서, 코드를 실행하면 아래와 같이 출력됩니다.

Alt text