본문 바로가기
Python/Matplotlib

레전드(legend, 범례) 함수의 옵션(입력 변수) - matplotlib(13)

by 콩돌 2019. 5. 9.
반응형

파이썬 버전 3.7 기준

matplotlib 버전 3.0.3 기준



  레전드(legend)의 입력 변수


본 포스팅에서는 레전드의 입력 키워드에 대한 내용을 다룬다.

본 포스팅에서 다루는 내용은 파이썬의 help()함수를 통해 얻을 수 있는 정보이기도하므로 필요하다면 참고할 수 있다.


각 입력변수의 사용법은 아래와 같다.

먼저 keyword 자리에는 입력 변수 명(예를들면 handles, labels, 등등)이 들어가고 input에는 키워드에서 요구하는 데이터를 입력하면된다.


사용 형식)

legend(keyword=input)

 


  레전드 작성을 위한 입력변수


 handles

입력 형태: Artist의 시퀀스


설명

레전드에 추가되는 aritist(lines, patches)의 리스트를 입력받는다. 

자동기능이 적절하지 않거나, 레전드에 보여지는 것들을 전부 제어해야 한다면, 이것과 아래 설명하는 labels 변수를 같이 사용해야한다.

입력되는 시퀀스의 요소 수는 labels변수와 같아야야 한다. 그렇지 않을 경우 끝을 잘라버려 작은 요소수의 입력 변수에 맞추게 된다.



 labels

입력 형태: 문자열(string,str)의 시퀀스


설명

아티스트 다음으로 보여줄 라벨의 리스트를 입력받는다.

자동기능이 적절하지 않거나, 레전드에 보여지는 것들을 전부 제어해야 한다면, 이것과 아래 설명하는 handles 변수를 같이 사용해야한다.



  레전드 위치 설정을 위한 입력변수


 loc

입력 형태: int, str, float 페어, 기본값


설명

기본값은 rcParams["legend.loc"]로 되어있으며 axes에 대해서는 'best'로, figure는 'upper right'로 되어있다.

레전드의 위치는 아래와 같은 문자열 혹은 정수를 입력함으로써 설정이 가능하다.

 

위치 문자열

 위치 코드 번호

 'best'

 0

 'upper right'

 1

 'upper left'

 2

 'lower left'

 3

 'lower right'

 4

 'right'

 5

 'center left'

 6

 'center right'

 7

 'lower center'

 8

 'upper center'

 9

 'center'

 10

 

이외의 방법으로는 x,y의 좌표값 float을 이용한 튜플(tuple)을 입력함으로써도 가능하다. 

좌표의 원점은 왼쪽 아래 코너로 설정되어있다. 

이 경우는 bbox_to_anchor 변수가 무시된다. 

 

'best'옵션은 데이터수가 많아지면 플롯을 작성하는데 시간을 오래 걸리게 한다. 

따라서 유저가 플로팅 속도를 개선하고 싶다면 명확한 위치를 입력하는 것이 좋다.


 bbox_toanchor

입력 형태: float으로구성된 2개 혹은 4개 요소의 튜플


설명

box는 loc와 함께 레전드의 위치를 설정하는대 사용되어진다.

기본값은 Axes.legend로 호출한 경우는 axes.bbox, Figure.legend로 호출한 경우는 figure.bbox이다. 

이 입력변수는 레전드를 임의로 배치할 수 있게 한다.


Bbox 좌표는 호출되는 레전드에 따라 bbox_transform에 의해 주어진 좌표계에서 기본 변환 축 또는 Figure 좌표로 해석된다.


만약 BboxBase 혹은 4개 요소의 튜플이 입력되는 경우는, 레전드가 위치되는 bbox (x, y, width, height)가 명시된다. 

사분면중 오른쪽 아래에서 최적의 위치에 레전드를 두기위해서는 다음과 같이 작성하면된다.

 

legend(loc='best', bbox_to_anchor=(0.5, 0.0, 0.5, 0.5))


2개 요소의 튜플인 (x, y)가 입력될 경우 레전드의 구석은 (x, y) 좌표에서 loc에 의해 위치된다.


legend(loc='upper right', bbox_to_anchor=(0.5, 0.5))



  레전드의 표현 설정을 위한 입력변수


 ncol

입력 형태: int


설명

레전드가 가지는 열의 수이다. 기본값은 1이다



 prop

입력 형태: None, dict, matplotlib.font_manager.FontProperties


설명

레전드의 폰트속성을 입력받는다. 만약 기본값인 None일 경우에는, 현재 matplotlib.rcParams에 입력되어있는 값이 사용된다.



 fontsize

입력 형태: int, float,  {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'}


설명

레전드의 폰트 사이즈를 제어한다. 

입력값이 숫자라면, 사이즈는 숫자값에 맞춰 절대적인 값으로 입력된다. 

문자열 값이라면, 현재 기본값으로 입력되어있는 사이즈에 상대적인 크기로 입력된다.

이 변수는 prop가 입력되지 않은 경우에만 사용된다. 



 numpoints

입력 형태: None, int


설명

Line2D에 대한 레전드 엔트리를 만들때 레전드안의 마커 포인트의 수를 입력받는다.

기본값은 None이고 이 경우 rcParams["legend.numpoints"]에서 값을 가져온다.



 scatterpoints

입력 형태: None, int


설명

PathCollection(scatter plot)에 대해 레전드 항목을 만들때 레전드 안에 마커포인트의 수를 입력받는다. 

기본값은 None이며, 이 경우 rcParams["legend.scatterpoints"]값을 받아온다.



 scatteryoffsets

입력 형태: float의 iterable 


설명

scatter plot 레전드 항목을 위해 만들어진 마커에 대한 수직오프셋을 입력받는다. 

0.0은 바닥이며, 1.0은 가장윗단 위치이다. 

같은 높이에서 모든 마커를 그리기 위해서는 [0.5]을 배정하면 된다. 

기본값은 [0.375, 0.5, 0.3125]



 markerscale

입력 형태: None, int, float


설명

기존에 그려진 것들과 비교하여 상대적인 마커의 크기를 입력받는다. 

기본값은 None,이며 이 경우 rcParams["legend.markerscale"]에서 값을 받아온다.



 markerfirst

입력 형태: bool


설명

True가 입력될 경우, 레전드 마커는 레전드 라벨의 왼쪽에 위치한다.

False가 입력될 경우, 레전드 마커는 레전드 라벨의 오른쪽에 위치한다.

기본값은 True이다.



  레전드 박스 설정을 위한 입력변수


 frameon

입력 형태: None, bool


설명

레전드가 patch(frame)위에 그려질지 아닐지 제어한다.

기본값은 None이며, rcParams["legend.frameon"]에서 값을 가져온다. 



 fancybox

입력 형태: None, bool


설명

레전드 백그라운드를 구성하는 FancyBboxPatch에 둥근 모서리 사용여부를 결정하는 변수이다. 

기본값은 None이며, 이 경우 rcParams["legend.fancybox"]을 사용한다.



 shadow

입력 형태: None, bool


설명

레전드 뒤에 그림자 효과를 사용 여부를 결정하는 변수이다. 

기본값은 None이며 rcParams["legend.shadow"]을 불러와서 사용한다.



 framealpha

입력 형태: None, float


설명

레전드 백그라운드의 알파투명도를 제어한다.

기본값은 None이며, rcParams["legend.framealpha"]가져와서 사용한다.

만약 shadow가 활성화되어있고 framealpha가 None이면 기본값은 무시된다.



 edgecolor

입력 형태: None, "inherit", 컬러 스팩


설명

레전드 백그라운드 선의 색을 제어한다. 

기본값은 None이며, rcParams["legend.edgecolor"]을 사용한다.

"inherit"인 경우, rcParams["axes.edgecolor"]을 불러와서 사용한다.



 mode

입력 형태: {"expand", None}


설명

만약 mode가 "expand"으로 세팅될 경우, 레전드는 수평방향으로 축을 다 메울정도로 확장된다.

(혹은 bbox_to_anchor 만약 레전드 사이즈가 정의된 경우에는)



 bbox_transform

입력 형태: None, matplotlib.transforms.Transform


설명

bounding box(bbox_to_anchor)을 변형시킨다. 

기본값인 None이 입력되면, Axes의 transAxes 변형이 사용된다.



  레전드의 타이틀 설정을 위한 입력변수


 title

입력 형태: str, None


설명

레전드의 타이틀을 입력받는다.

기본값은 None이며 이경우 타이틀이 입력되지 않은 상태이다.


 title_fontsize

입력 형태: str, None


설명

타이틀의 폰트사이즈를 입력받는다. 

기본값은 기본 폰트사이즈이다.



  레전드의 여백 설정을 위한 입력변수


 borderpad

입력 형태: float, None


설명

레전드 경계에 부분적인 빈공간을 입력한다.

폰트 사이즈 유닛으로 측정되어진다. 

기본값은 None이고 rcParams["legend.labelspacing"] 값을 사용한다.


 labelspacing

입력 형태: float, None


설명

레전드 항목 사이의 수직방향으로의 여백을 입력받는다. 

폰트 사이즈 유닛으로 측정되어진다. 

기본값은 None이고 rcParams["legend.labelspacing"]값을 사용한다.


 handlelength

입력 형태: float or None


설명

레전드 핸들의 길이를 입력받는다. 

폰트 사이즈 유닛으로 측정되어진다. 

기본값은 None이고 rcParams["legend.handlelength"]값을 사용한다. 


 handletextpad

입력 형태: float, None


설명

레전드 핸들과 텍스트 사이에 패드를 입력 받는다. 

폰트 사이즈 유닛으로 측정되어진다. 

기본값은 None이고 rcParams["legend.handletextpad"]값을 사용한다.


 borderaxespad

입력 형태: float, None


설명

레전드 경계와 축사이에 패드를 입력받는다.
폰트 사이즈 유닛으로 측정되어진다. 

기본값은 None이고 rcParams["legend.borderaxespad"]값을 사용한다.


 columnspacing

입력 형태: float, None


설명

열사이에 공간을 입력받는다.
폰트 사이즈 유닛으로 측정되어진다. 

기본값은 None이고 rcParams["legend.columnspacing"]값을 사용한다.



  레전드의 매핑을 위한 입력변수


 handler_map

입력 형태: dict or None


설명

레전드 핸들러에 인스턴스나 자료형을 매핑하는 사용자 딕셔너리를 입력받는다. 
handler_map은 matplotlib.legend.Legend.get_legend_handler_map()에 있는 기본 처리기(handler) 맵을 업데이트한다.



 

 

 

 

 참고자료

  https://matplotlib.org/api/_as_gen/matplotlib.pyplot.legend.html#matplotlib.pyplot.legend

 





반응형

댓글