팀 미팅에서 지윤이 차트를 화면에 띄웠다. 산점도는 잘 그려졌는데, 문제가 있었다. 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()
title의 x=0.5와 xanchor="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)를 사용합니다.