[matplotlib]plt 라벨(label) 위치설정

반응형
    반응형

    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로 등록을 해주어야 라벨 모두가 나옵니다.

    등록을 안 해주면 마지막에 쓴 라벨만 나오게 됩니다.

    댓글

    Designed by JB FACTORY

    ....