[matplotlib]plt 라벨(label) 위치설정
- Python/그래프 그리기
- 2021. 3. 28.
matplotlib의 라벨 붙이는 방법에 대해 알려드리겠습니다.
예를 위해 데이터를 준비했습니다.
x는 x축에 있는 값이고 y는 y을 따라 움직이는 점들입니다.
보시다시피 y=2x인 함수입니다.
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8,9,10]
y = [2,4,6,8,10,12,14,16,18,20]
그래프를 그려보겠습니다.
plt.plot(x,y)
loc
여기다가 이제 라벨을 붙입니다. 단순하게 라벨을 붙이면 안됩니다.
plt.plot(x,y,label='y=2x')
반드시 legend를 추가적으로 써줘야합니다.
plt.plot(x,y,label='y=2x')
plt.legend(loc='upper right')
라벨을 붙였습니다. 그런데 위치를 좀 바꿔야 할것같습니다. 그래프를 가리니까요.
loc에 써넣을 수 있는 건 다음과 같습니다.
- best : 자동으로 최적의 위치에 라벨을 위치시킵니다.
- upper right, upper left, upper center
- lower right, lower left, lower center
- center, right, center left, center right
plt.plot(x,y,label='y=2x')
plt.legend(loc='best')
best로 하면 임의로 가장 괜찮은 자리에 넣습니다.
그래도 내가 정확한 위치를 원한다면 loc에 자신이 원하는 걸 쓰면 됩니다.
bbox_to_anchor
그래프 밖이나 좀 더 정확한 위치로 라벨을 넣고 싶다면 loc 대신 bbox_to_anchor 를 쓰시면 됩니다.
bbox_to_anchor 는 (x,y,width,height) 로 이루어져 있어서 직접 좌표, 글자크기, 높이를 넣을 수 있습니다.
bbox_anchor는 x,y가 1보다 작은 값일 때 그래프 안으로 들어오고 밖으로 내보내고 싶다면 1보다 큰 값을 넣으면 됩니다. (0,0)이면 왼쪽 아래 구석이고 (1,1)이면 오른쪽 위쪽입니다.
자신의 그래프에 비례해서 좌표가 설정되므로
좌표 조정은 자신이 여러번 하면서 체크하시면 됩니다.
그래프 크기를 고정시켜 놓으면 편하게 좌표설정을 할 수 있을겁니다.
plt.plot(x,y,label='y=2x')
plt.legend(bbox_to_anchor=(1,1))
다중 레이블
이번에는 그래프가 여러개일 경우입니다.
3의 배수도 추가를 시켜보겠습니다.
x = [1,2,3,4,5,6,7,8,9,10]
y = [2,4,6,8,10,12,14,16,18,20]
z = [3,6,9,12,15,18,21,24,27,30]
z는 3의 배수입니다. 즉, z=3x 이죠.
그래프 두개를 만들어서 각각의 레전드를 붙이고 싶다면 다음과 같이 합니다.
plt.plot(x,y,label='y=2x')
plt.plot(x,z,label='z=3x')
plt.legend(bbox_to_anchor=(1,1))
라벨 전체가 (1,1)에 배치됩니다.
그런데 z=3x를 다른곳으로 배치하고 싶다면 각각 배치할 좌표를 써야합니다.
line1,= plt.plot(x,y,label='y=2x')
line2, = plt.plot(x,z,label='z=3x')
legend1 = plt.legend(handles=[line1],bbox_to_anchor=(1,1))
art_legend1 = plt.gca().add_artist(legend1)
legend2 = plt.legend(handles=[line2],bbox_to_anchor=(1.2,0))
art_legned2 = plt.gca().add_artist(legend2)
각각 정의를 해준다음 하나씩 bbox_to_anchor에 좌표를 넣어주면 됩니다.
그리고 plt.gca().add_arties로 등록을 해주어야 라벨 모두가 나옵니다.
등록을 안 해주면 마지막에 쓴 라벨만 나오게 됩니다.
'Python > 그래프 그리기' 카테고리의 다른 글
[matplotlib]여러개로 나누어서 그래프 출력(subplot) (0) | 2021.05.14 |
---|---|
[matplotlib]n차원 데이터 그리기 (0) | 2021.05.13 |
matplotlib 그래프 영역 채우기 (0) | 2021.04.15 |
[matplotlib]pyplot.text(글자 쓰기) (0) | 2021.03.24 |
[Python] matplotlib 에서 한글 출력 (4) | 2021.03.02 |