hue, style, size로 차원 추가
"x축이 total_bill, y축이 tip인데, 요일 정보도 같이 보고 싶어요."
민서가 말했습니다. 선배는 잠시 생각하다가 파라미터 하나를 추가했습니다.
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day")
점들이 색깔별로 나뉘었습니다. 요일마다 다른 색입니다.
"색으로 하나 더 표현할 수 있어요?"
"스타일이랑 크기도 돼."
hue: 색상으로 범주 구분
hue 파라미터는 범주형 컬럼을 색상으로 구분합니다. Seaborn이 색상 팔레트를 자동으로 선택하고, 범례를 생성합니다.
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day")plt.title("요일별 계산서 금액과 팁")plt.show()
범주형 컬럼 외에도 수치형 컬럼을 hue에 지정할 수 있습니다. 수치형의 경우 연속적인 색상 그라데이션이 적용됩니다.
style: 마커 모양으로 구분
style 파라미터는 데이터 포인트의 마커 모양을 변경합니다. 색맹인 독자를 위한 접근성 측면에서도 hue와 함께 쓰면 좋습니다.
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")# hue와 style을 같은 컬럼에 적용sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time", style="time")plt.title("시간대별 계산서 금액과 팁")plt.show()
같은 컬럼을 hue와 style에 동시에 지정하면, 색상과 마커 모양이 모두 달라집니다. 컬러 프린트나 흑백 출력에서도 구분이 가능해집니다.
size: 점 크기로 수치 표현
size 파라미터는 점의 크기를 변경합니다. 수치형 컬럼을 지정하면 값이 클수록 점이 커집니다.
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")# size에 수치형 컬럼 지정sns.scatterplot(data=tips, x="total_bill", y="tip", size="size")plt.title("일행 수에 따른 계산서 금액과 팁")plt.show()
tips 데이터셋에서 size 컬럼은 식당을 방문한 일행 수입니다. 일행이 많을수록 점이 크게 표시됩니다.
세 파라미터를 동시에 사용: 4차원 표현
x축, y축, hue, style, size를 모두 사용하면 2D 차트에 최대 5개의 차원을 담을 수 있습니다. 이 중 세 개(hue, style, size)를 동시에 쓰는 예제입니다.
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.scatterplot( data=tips, x="total_bill", # 1차원: x축 (수치) y="tip", # 2차원: y축 (수치) hue="day", # 3차원: 색상 (범주) style="time", # 4차원: 마커 모양 (범주) size="size", # 5차원: 점 크기 (수치) alpha=0.7)plt.title("5가지 변수를 한 차트에")plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left")plt.tight_layout()plt.show()
민서가 화면을 보고 멈췄습니다.
"데이터에 차원을 더할 수 있다니. x, y 말고 색이랑 모양이랑 크기까지 데이터를 담는 거잖아요."
선배가 고개를 끄덕였습니다. "맞아. 근데 너무 많이 쓰면 오히려 읽기 힘들어져. 차원을 추가할 때마다 '이게 정말 필요한 정보인가' 먼저 물어봐야 해."
실용적인 사용 가이드
| 상황 | 권장 조합 |
|---|---|
| 범주 하나 구분 | hue |
| 색맹 독자 고려 | hue + style (같은 컬럼) |
| 수치 차원 추가 | hue + size |
| 복잡한 비교 | hue + style (서로 다른 컬럼) |
| 5차원 표현 | hue + style + size (차트가 복잡해질 수 있음) |
차원이 많아질수록 범례도 길어집니다. bbox_to_anchor로 범례를 그래프 바깥으로 빼거나, plt.tight_layout()으로 여백을 자동 조정하는 것이 좋습니다.
sizes로 크기 범위 지정
size 파라미터에 수치형 컬럼을 쓸 때, 기본 크기 범위가 너무 좁거나 넓으면 sizes 파라미터로 최솟값과 최댓값을 직접 지정할 수 있습니다.
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.scatterplot( data=tips, x="total_bill", y="tip", hue="day", size="size", sizes=(30, 200))plt.title("크기 범위를 30~200으로 지정")plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left")plt.tight_layout()plt.show()
sizes=(30, 200)은 가장 작은 값이 마커 크기 30, 가장 큰 값이 200으로 스케일됨을 의미합니다.