stacked countplot을 그릴 때 가장 쉽게 구현할 수 있는 방법이 seaborn의 histplot에 hue 파타미터를 지정해주는 것인데요,
matplotlib이나 seaborn에서 제공하는 다른 플랏 객체들과는 달리 seaborn의 histplot은 legend의 순서를 쉽게 바꿀 수 없습니다.
그런데 기본적으로 제공하는 legend의 순서가 stack이 된 순서와는 역순이라는 문제점이 있습니다.
legend와 bar의 순서가 뒤바뀌어 있어서 눈으로 보고 해석하기에 상당히 헷갈립니다.
matplotlib legend order reverse
change plot legend order
reverse legend
legend order seaborn ..
등등 다양한 검색어로 검색해 보았지만 뚜렷한 해결방안이 없었습니다.
https://stackoverflow.com/questions/22263807/how-is-order-of-items-in-matplotlib-legend-determined
위 질문과 답변을 보고 그대로 따라해보았을 때도, histplot 객체에 .get_legend_handles_labels() 를 붙이면 handles, labels에 모두 빈 리스트가 나오게 됩니다.
대신 찾게 된 것이 아래에 있는 질문 답변이었는데요,
https://stackoverflow.com/questions/66346542/customizing-legend-in-seaborn-histplot-subplots
아래 코드로 histplot의 legend 순서를 역순으로 변경할 수 있습니다.
import seaborn as sns
p = sns.histplot(데이터, x=컬럼명, hue=컬럼명, ..)
legend_names = [레전드에 들어갈 각 문자열 (내가 원하는 순서)]
legend = p.get_legend()
handles = legend.legendHandles
legend.remove()
p.legend(handles[::-1], legend_names)
혹은 만약 역순이 아니라 본인이 원하는 순서가 있다면 가장 마지막 줄을 바꿀 수 있겠습니다.
handles_order = [3,2,1,4,0] # 만약 레전드에 다섯 개가 들어간다면
p.legend([handles[idx] for idx in handles_order], legend_names)
이렇게 빨간색이 가장 위로, 노랑색이 가장 아래로 오는 bar의 순서에 맞추어 legend에 표기되는 label의 순서도 바꿀 수 있습니다.
'Computer > python' 카테고리의 다른 글
[크롤링] NoSuchElementException 원인: 크롤링 창이 전체화면이 아닌 경우! (0) | 2022.12.16 |
---|---|
[Redash] name '_inplacevar_' is not defined (0) | 2022.12.01 |
[pandas] pd.isna() 사용 시 주의점: is False와 is not True의 차이점 (0) | 2022.09.15 |
[ipynb] 쥬피터 노트북에서 %와 !의 차이 (0) | 2022.09.15 |
[seaborn] 예쁜 그래프를 만들 수 있는 커스텀 팔레트 만들기! (0) | 2022.01.05 |
댓글