반응형

파이썬 Matplotlib을 이용한 데이터 시각화 프로그래밍14 - 그래프 또는 차트에 주석 달기



데이터를 분석하여 그래프나 차트로 보여줄 때 중요한 이벤트나 이슈 등이 있다면 이를 텍스트나 화살표로 표시하면 사용자에게 보다 친절함을 제공해줄 수 있습니다.


13편에서 활용한 데이터는 1880년 이후로 미국에서 태어난 남자아이, 여자아이 출생수를 그래프로 나타낸 것입니다. 그래프를 보면 1958년 정도에 피크를 보인 후 점차 출생자수가 줄어드는 것을 알 수 있습니다.


1958년에 즈음에 태어난 세대들을 우리나라에서는 베이비붐 세대라고 하는데 미국에서도 마찬가지네요. 차트에 이 부분을 '베이비붐'이라고 표시를 해보도록 하겠습니다.



13편의 코드와 달라진 부분은 하나입니다.


>>> ax.annotate('베이비붐', (1958, y2[1958-1881]), xytext=(0.7, 0.95),

        textcoords='axes fraction', arrowprops=dict(color='g', alpha=0.5))


annotate()는 플롯에 텍스트를 표시하며 옵션으로 화살표도 표시할 수 있습니다. annotate()에 사용된 인자를 살펴보면,

  • '베이비붐': 플롯에 표시할 텍스트
  • (1958, y2[1958-1881]): 화살표를 그리는 경우 화살표 끝이 지시할 위치. 좌표값으로 표시함
  • xytext=(0.7, 0.95): 텍스트가 위치할 지점. textcoords 인자가 'axes fraction'인 경우 0.7과 0.95는 플롯의 가로, 세로방향으로 70%와 95%위치임을 의미함
  • textcoords='axes fraction': xytext의 인자는 가로방향, 세로방향의 비율로 지정
  • arrowprops=dict(color='g', alpha=0.5): 화살표의 속성을 사전 자료로 지정. 색상은 green, 투명도는 0.5로 설정함. 여기에 사용될 수 있는 인자는 여기를 참고


여기서 텍스트 위치를 지정하는 xytext는 textcoords 인자에 따라 인자의 값이 의미하는 바가 다릅니다. textcoords를 지정하지 않으면 xytext로 지정되는 값은 디폴트로 좌표값이 됩니다.


이 코드를 실행하면 아래와 같습니다.




이제, 베이비붐 시기에 태어난 남자아이 여자아이 출생수를 차트에 삽입해보겠습니다.

이 역시 annotate()를 사용할 것인데, 위 코드의 plt.legend(loc=4) 앞부분에 아래의 코드를 삽입합니다.




>>> bbox_props_f = dict(boxstyle='round', fc='w', ec='r', lw=2)

>>> bbox_props_m = dict(boxstyle='round', fc='w', ec='b', lw=2)


주석을 둥근 모서리 사각형으로 둘러싸기 위해 박스 속성을 위해 사전자료를 정의합니다. 주요 인자는 다음과 같습니다.


  • boxstyle='round': 박스스타일을 둥근 모서리 사각형으로 지정 
  • fc = 'w': 사각형을 흰색으로 채움
  • ec='r': 외곽선을 빨간색 선으로 함
  • lw=2: 선두께를 2로 설정


annotate()에 사용되는 화살표 및 박스 속성 인자에 대해 보다 많은 정보는 여기를 참고하세요~


annotate()의 인자로 bbox= 가 있음을 알 수 있습니다. 코드를 실행하면 아래와 같은 결과가 나옵니다.



반응형

+ Recent posts