범례와 그리드
민서는 hue를 써서 색으로 성별을 구분했을 때, 범례가 그래프 위에 겹쳐 표시되는 것을 발견했습니다.
"범례 위치 바꿀 수 있어요?"
선배가 고개를 끄덕였습니다. "그리드 스타일도 같이 알아두면 편해."
자동 범례
hue 파라미터를 지정하면 범례가 자동으로 생성됩니다. 별도의 설정 없이도 어떤 색이 어떤 값을 나타내는지 표시됩니다.
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.scatterplot(data=tips, x="total_bill", y="tip", hue="sex")plt.title("성별에 따른 계산서 금액과 팁")plt.show()
범례 위치 조절
plt.legend()의 loc 파라미터로 위치를 지정합니다.
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.scatterplot(data=tips, x="total_bill", y="tip", hue="sex")plt.legend(loc="upper left")plt.title("성별에 따른 계산서 금액과 팁")plt.show()
자주 사용하는 위치 값은 다음과 같습니다.
| 값 | 위치 |
|---|---|
"upper right" |
오른쪽 상단 (기본값) |
"upper left" |
왼쪽 상단 |
"lower right" |
오른쪽 하단 |
"lower left" |
왼쪽 하단 |
"best" |
자동으로 최적 위치 선택 |
범례 제거
발표 자료에서 범례가 필요 없거나, 별도로 설명하는 경우에는 범례를 없앨 수 있습니다.
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")# legend=False로 범례 비활성화sns.scatterplot(data=tips, x="total_bill", y="tip", hue="sex", legend=False)plt.title("성별에 따른 계산서 금액과 팁 (범례 없음)")plt.show()
그리드 스타일: set_theme
Seaborn은 set_theme() 함수로 전체적인 그래프 스타일을 설정합니다. style 파라미터로 배경 격자 방식을 선택할 수 있습니다.
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")# 흰 배경에 수평/수직 그리드sns.set_theme(style="whitegrid")sns.scatterplot(data=tips, x="total_bill", y="tip", hue="sex")plt.title("whitegrid 스타일")plt.show()
사용 가능한 style 값과 특징은 다음과 같습니다.
| style | 특징 |
|---|---|
"darkgrid" |
어두운 배경에 그리드 (기본값) |
"whitegrid" |
흰 배경에 수평/수직 그리드 |
"dark" |
어두운 배경, 그리드 없음 |
"white" |
흰 배경, 그리드 없음 |
"ticks" |
흰 배경, 축 눈금만 |
set_theme()은 한 번 설정하면 이후 모든 그래프에 적용됩니다. 노트북 상단에 한 번만 설정해두면 일관된 스타일을 유지할 수 있습니다.
개별 그래프에만 스타일 적용하기
with sns.axes_style() 블록을 사용하면 특정 그래프에만 스타일을 적용하고, 블록이 끝나면 이전 설정으로 돌아옵니다.
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")fig, axes = plt.subplots(1, 2, figsize=(12, 5))# 왼쪽: whitegrid 스타일with sns.axes_style("whitegrid"): plt.sca(axes[0]) sns.scatterplot(data=tips, x="total_bill", y="tip", ax=axes[0]) axes[0].set_title("whitegrid")# 오른쪽: ticks 스타일with sns.axes_style("ticks"): plt.sca(axes[1]) sns.scatterplot(data=tips, x="total_bill", y="tip", ax=axes[1]) axes[1].set_title("ticks")plt.tight_layout()plt.show()