iBetter Books
수정

팀 미팅에서 지윤이 차트를 화면에 띄웠다. 산점도는 잘 그려졌는데, 문제가 있었다. x축은 "sepal_width", y축은 "sepal_length". 컬럼명 그대로였다.

"이거 교수님한테 보여드리면 변수명이 뭔지 설명해야 해서 시간 다 써요."

강주원 선배가 웃었다.

"그래서 레이블을 붙이는 거야. 차트는 보는 사람이 설명 없이도 이해할 수 있어야 해."


Express에서 제목과 축 레이블 설정

가장 빠른 방법은 px.scatter() 파라미터에서 직접 설정하는 것입니다.

# 파일: labels_express.pyimport plotly.express as pxdf = px.data.iris()fig = px.scatter(    df,    x="sepal_width",    y="sepal_length",    color="species",    title="붓꽃 종류별 꽃받침 크기",    labels={        "sepal_width": "꽃받침 너비 (cm)",        "sepal_length": "꽃받침 길이 (cm)",        "species": "종"    })fig.show()

실행 결과

실행하면 한글 제목과 한글 축 레이블이 적용된 붓꽃 산점도가 나타납니다. 호버 툴팁과 범례에도 한글 이름이 표시됩니다.

labels 딕셔너리에 컬럼명을 키로, 표시할 이름을 값으로 넣으면 됩니다. 축 레이블뿐 아니라 호버 툴팁과 범례 이름에도 자동으로 적용됩니다.

update_layout으로 세밀하게 설정

Express 파라미터로 부족할 때는 update_layout()을 사용합니다.

# 파일: labels_update.pyimport plotly.express as pxdf = px.data.iris()fig = px.scatter(    df,    x="sepal_width",    y="sepal_length",    color="species")fig.update_layout(    title=dict(        text="붓꽃 종류별 꽃받침 크기",        x=0.5,                # 0=왼쪽, 0.5=가운데, 1=오른쪽        xanchor="center",        font=dict(size=18)    ),    xaxis=dict(        title="꽃받침 너비 (cm)",        range=[1.5, 5.0],     # x축 범위 고정        tickmode="linear",        dtick=0.5             # 틱 간격    ),    yaxis=dict(        title="꽃받침 길이 (cm)",        range=[4.0, 8.5]    ))fig.show()

실행 결과

titlex=0.5xanchor="center"를 함께 쓰면 제목이 가운데 정렬됩니다. Express에서 만든 차트는 기본적으로 왼쪽 정렬이므로, 가운데 정렬이 필요할 때 이렇게 수정합니다.

범례 위치 조정

기본 범례 위치는 오른쪽 위입니다. 차트 내용이 오른쪽에 몰려 있어서 범례와 겹칠 때는 위치를 조정합니다.

# 파일: legend_position.pyimport plotly.express as pxdf = px.data.iris()fig = px.scatter(    df,    x="sepal_width",    y="sepal_length",    color="species",    title="붓꽃 종류별 꽃받침 크기")fig.update_layout(    legend=dict(        x=0.01,           # 0=차트 왼쪽 끝, 1=차트 오른쪽 끝        y=0.99,           # 0=차트 아래 끝, 1=차트 위 끝        xanchor="left",        yanchor="top",        bgcolor="rgba(255, 255, 255, 0.8)",   # 반투명 흰색 배경        bordercolor="lightgray",        borderwidth=1    ))fig.show()

실행 결과

실행하면 범례가 차트 왼쪽 상단 안쪽에 반투명 배경으로 표시됩니다. 범례 항목을 클릭하면 해당 종을 숨기거나 다시 표시할 수 있습니다.

범례를 차트 바깥으로 완전히 빼고 싶다면 음수 좌표 또는 1 이상의 좌표를 사용합니다. 예를 들어 x=1.02는 차트 오른쪽 바깥입니다.

범례 제목을 바꾸고 싶다면 legend_title_text를 사용합니다.

# 파일: legend_title.pyimport plotly.express as pxdf = px.data.iris()fig = px.scatter(    df,    x="sepal_width",    y="sepal_length",    color="species")fig.update_layout(legend_title_text="붓꽃 종류")fig.show()

실행 결과

실행하면 범례 헤더에 "붓꽃 종류"라는 제목이 표시됩니다.


자주 묻는 질문

Q: Express의 labels 파라미터와 update_layout(xaxis_title=...)을 함께 쓰면 어떻게 되나요?

update_layout()이 나중에 실행되므로 update_layout()의 값이 우선 적용됩니다. labels로 설정한 이름은 호버 툴팁과 범례에는 남아 있지만, 축 레이블은 덮어쓰여집니다.

Q: 축 범위를 자동으로 하되 최솟값만 0으로 고정하고 싶어요.

yaxis=dict(rangemode="tozero")를 사용하면 됩니다. 이렇게 하면 데이터의 최댓값에 맞게 상한은 자동으로 조정되고, 하한은 0으로 고정됩니다.

Q: 범례를 완전히 숨기고 싶어요.

fig.update_layout(showlegend=False)를 사용합니다.