파이썬 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= 가 있음을 알 수 있습니다. 코드를 실행하면 아래와 같은 결과가 나옵니다.
[출처] 데이터 시각화 프로그래밍14 - 그래프에 주석 달기|작성자 옥수별
'연구개발 > 데이터시각화' 카테고리의 다른 글
데이터 시각화 프로그래밍16 - Matplotlib 애니메이션 (0) | 2017.12.14 |
---|---|
데이터 시각화 프로그래밍15 - 서브플롯 활용하기 (0) | 2017.12.14 |
데이터 시각화 프로그래밍13 - Matplotlib 스타일 적용하기 (0) | 2017.12.14 |
데이터 시각화 프로그래밍12 - 주가 캔들 그리기 (0) | 2017.12.14 |
데이터 시각화 프로그래밍11 - Spine과 기준선 정의하기 (0) | 2017.12.14 |