조금씩 꾸준히 완성을 향해

[Matplotlib] 그래프 주석 달기 & 마커 지정 본문

Python/데이터 시각화

[Matplotlib] 그래프 주석 달기 & 마커 지정

all_sound 2022. 9. 30. 23:27

주석 달기 : annotate() 함수

  • 주석 내용(텍스트)을 넣을 위치와 정렬방법 등을 함수에 함께 전달
  • S는 '', 화살표의 머리부분은 xy, 꼬리부분은 xytext, 화살표 서식은 arrowprops = dict() 사용
  • arrowprops 옵션 사용시 텍스트 대신 화살표 표시를 나타냄
  • 화살표 서식은 arrowprops=dict() 함수 내에 arrowstyle(->), color(skyblue), lw(5) 속성 지정
plt.annotate('',xy=(21,650000), xytext=(2, 300000), 
			arrowprops=dict(arrowstyle='->', color='skyblue', lw=5)) 
plt.annotate('',xy=(43,450000), xytext=(28,680000), 
			arrowprops=dict(arrowstyle='->', color='olive', lw=5))

먼저 화살표를 그리는 예제를 살펴보자.

텍스트는 쓰지 않을 거라서 빈 문자열로 설정을 한다. 그리고 화살표의 머리와 꼬리 부분의 위치를 지정해준다. xy=()가 머리 부분 좌표가 되고, xytext=()가 꼬리부분 좌표가 된다. 그리고 세부적인 화살표 속성을 딕셔너리에 넣어 꾸며준다.

aroowprops=dict() 안에 화살표스타일, 화살표 색, 그리고 화살표 굴기(lw)를 지정해 넣을 수 있다. 

 

plt.annotate('인구 이동 증가(1970-1996)', xy = (11, 440000), rotation = 20, 
			va='baseline', ha='center', fontproperties=mg_15)
plt.annotate('인구 이동 감소(1995-2017)', xy = (36, 540000), rotation = -16, 
			va='baseline', ha='center', fontproperties=mg_15)

텍스트를 주석으로 달 때는 조금 다르게 사용된다. 먼저  텍스를 문자열 형태로 넣은 후, 넣을 위치를 xy=()로 지정한다. 이때의 좌표는 텍스트의 가운데 위치를 의미한다. rotation은 주석을 회전시킬 때 쓰는 속성으로, 몇 도인지 숫자를 적는다. 

va 는 텍스트 상하정렬, ha는 텍스트 좌우정렬을 나타낸다. 

 

이 주석들을 그래프에 적용시킨 결과는 아래와 같다.

from matplotlib.patches import ArrowStyle  # ArrowStyle 임포트
plt.figure(figsize=(14,5)) #가로 사이즈 늘리기 
plt.plot(sr_one.index, sr_one.values) #플롯 만들기
plt.title('서울 -> 경기 인구 이동', fontproperties=mg_30) #제목 지정, 폰트사이즈 설정
plt.xlabel('기간', fontproperties=mg, size='20') #x축 지정
plt.xticks(rotation=70) #축 70도 회전
plt.ylabel('이동 인구수', fontproperties=mg,size='20') #y축 지정
plt.legend(['서울->경기'],loc='best', prop=mg_20)  # 범례 넣기 

plt.ylim(50000, 800000) # 주석 넣을 여백을 위해 y축 범위 늘리기 ylimit(최소값, 최대값)
plt.annotate('',xy=(21,650000), xytext=(2, 300000), arrowprops=dict(arrowstyle='->', color='skyblue', lw=5)) 
plt.annotate('',xy=(43,450000), xytext=(28,680000), arrowprops=dict(arrowstyle='->', color='olive', lw=5))
plt.annotate('인구 이동 증가(1970-1996)', xy = (11, 440000), rotation = 20, va='baseline', ha='center', fontproperties=mg_15)
plt.annotate('인구 이동 감소(1995-2017)', xy = (36, 540000), rotation = -16, va='baseline', ha='center', fontproperties=mg_15)
plt.show()

 

 

Marker 지정

마커란 그래프에서 데이터 위치를 표시해 주는 걸 말한다.

  • marker='o' : 마커 지정( 온점(.), 별(*) 등 가능 )
  • markersize='10' : 마커 사이즈 지정
  • mkargerfacecolor='red' : 마커 색상 지정

마커는 플롯을 만들 때 속성값으로 넣어준다. 

plt.plot(sr_one.index, sr_one.values, 
		marker='o', markersize='10', markerfacecolor='red')

이런 식으로 'o' 모양의 크기 10인 빨간색 마커를 만들 수 있다. 

 

 

실제 그래프에 활용해 보면,

from matplotlib.patches import ArrowStyle
plt.figure(figsize=(14,5)) #가로 사이즈 늘리기 
plt.style.use('seaborn-colorblind') #스타일 서식 지정
plt.plot(sr_one.index, sr_one.values, 
		marker='o', markersize='10', markerfacecolor='red') #플롯 만들기, 마커지정
plt.title('서울 -> 경기 인구 이동', fontproperties=mg_30) #제목 지정, 폰트사이즈 설정
plt.xlabel('기간', fontproperties=mg, size='20') #x축 지정
plt.xticks(rotation=70) #축 70도 회전
plt.ylabel('이동 인구수', fontproperties=mg,size='20') #y축 지정
plt.ylim(50000, 800000) # 주석 넣을 여백을 위해 y축 범위 늘리기 ylimit(최소값, 최대값)
plt.legend(['서울->경기'],loc='best', prop=mg_20)  # 범례 넣기 
plt.show()

 

이렇게 동그란 마커가 잘 생성된 것을 볼 수 있다.