갤러리: Scatterplot with multiple semantics — seaborn 0.12.0 documentation (pydata.org)
도큐먼트: seaborn.scatterplot — seaborn 0.12.0 documentation (pydata.org)
Scatterplot?
산점도 그래프(점으로 데이터의 분포를 나타내는 그래프)
x와 y의 관계를 hue, size, style 파라미터 등을 활용하여 보여주는 그래프이다.
수치형 컬럼만 지정할 수 있을까????
데이터셋 로드
tips = sns.load_dataset("tips")
tips.head()
기본 scatterplot
sns.scatterplot(data=tips, x="total_bill", y="tip")
수치형 변수와 수치형 변수 간의 관계를 그려보았다.
그럼 x, y에 각각 범주형 변수와 수치형 변수를 넣으면 어떻게 될까?
sns.scatterplot(data=tips, x="day", y="tip")
오류가 나지않고 그래프가 그려진다. 그러나, 산점도 그래프로서의 의미가 있나 싶다.
추측이지만, 산점도 그래프는 수치형 변수와 수치형 변수 간의 관계를 볼 때 의미가 있을 것 같다.
(수치형 변수와 - 범주형 변수의 관계는 다른 그래프가 더 적당하지 않을까?)
hue로 색상 구분하기(수치형변수, 범주형변수 모두 가능)
범주형 변수로 구분을 해주었다.
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")
수치형 변수로도 구분할 수 있을까?
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size")
가능은 하지만, 범례 수가 많아서 보기 힘들다.
hue로 지정하는 변수는 3개 내외의 값을 가진 것으로 지정하는 것이 좋을 것 같다.
(그럼 범주형 변수가 적절할 것 같다.)
만약 hue에 고윳값이 많은 수치형 변수를 입력하는 경우엔 균일한 간격을 가진 대표적인 수치들이 범례로 사용된다.
tip_rate = tips.eval("tip / total_bill").rename("tip_rate")
sns.scatterplot(data=tips, x="total_bill", y="tip", hue=tip_rate)
palette
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", palette="deep")
style로 점의 스타일을 지정
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time", style="time")
style은 ppt의 템플릿과 같은 느낌이다.
style을 사용할 때에는 리스트나 딕셔너리 형태로도 지정할 수 있다.
※ lunch는 네모로(s), dinner는 X로 표시해보자.
markers = {"Lunch": "s", "Dinner": "X"}
sns.scatterplot(data=tips, x="total_bill", y="tip", style="time", markers=markers)
style - markers에 additional keyword arguments 지정하기
sns.scatterplot(data=tips, x="total_bill", y="tip", s=100, color=".2", marker="+")
hue와 style 함께 사용하기
함께 사용하면 두가지 기준으로 나누어서 자료를 확인할 수 있다.
ex) 토요일 점심, 토요일 저녁 등
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day", style="time")
size로 점(marker)의 크기를 지정하기
size의 변수로 수치형 변수를 할당하여 점의 크기에 의미를 부여할 수도 있다.
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", size="size")
legenth= "full"
size를 사용해서 점(marker)의 크기를 조절하고
legeth = "full"을 함께 사용하면, 범례에 모든 고유값을 강제로 표시할 수 있다.
sns.scatterplot(
data=tips, x="total_bill", y="tip", hue="size", size="size",
sizes=(20, 200), legend="full"
)
여기서는 원래 size 범례의 모든 항목이 표시되었기 때문에 별 의미가 없지만,
hue와 마찬가지로 size에 고유값이 많은 수치형 데이터를 입력하는 경우에 사용하면 의미가 있지 않을까 싶다.
hue_norm
hue_norm에 튜플 값이나 matplotlib.colors.Normalize 를 전달하면,
정규화하여 정량적 색상 매핑을 할 수 있다.
sns.scatterplot(
data=tips, x="total_bill", y="tip", hue="size", size="size",
sizes=(20, 200), hue_norm=(0, 7), legend="full"
)
wide-form data의 scatterplot
지금까지 long-form data의 산점도 그래프를 살펴보았다.
wide-form data의 산점도도 알아보자.
import pandas as pd
import numpy as np
index = pd.date_range("1 1 2000", periods=100, freq="m", name="date")
data = np.random.randn(100, 4).cumsum(axis=0)
wide_df = pd.DataFrame(data, index, ["a", "b", "c", "d"])
sns.scatterplot(data=wide_df)
relplot 맛보기
relplot은 scatterplot과 Facetgrid를 결합한 형태이다.
범주형 변수도 부가적인 그룹화도 가능하고, 다수의 subplot도 지정이 가능하다.
relplot을 사용하는 것이 패싯 간의 의미 매핑을 보다 잘 나타내기 때문에
facetgrid를 직접 사용하는 것보다 더 좋다.
sns.relplot(
data=tips, x="total_bill", y="tip",
col="time", hue="day", style="day",
kind="scatter"
)
'Python > Seaborn' 카테고리의 다른 글
[python] Seaborn 4 - lineplot (1) | 2022.11.15 |
---|---|
[Python] seaborn 2 - lmplot (0) | 2022.10.27 |
[Python] seaborn 1 - 기본개념 (0) | 2022.10.27 |
댓글