import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rc
import seaborn as sns
plt.rcParams["axes.unicode_minus"] = False
rc("font", family="Malgun Gothic")
%matplotlib inline
먼저, 간단한 삼각함수 그래프를 통해 기초 틀을 확인해보자.
# 그래프로 나타낼 데이터 준비
x = np.linspace(0, 14, 100)
y1 = np.sin(x)
y2 = 2 * np.sin(x + 0.5)
y3 = 3 * np.sin(x + 1.0)
y4 = 4 * np.sin(x + 1.5)
# seaborn 활용 그래프 그리기
sns.set_style("dark") # 그래프 배경 스타일 지정
plt.figure(figsize=(10,6))
plt.plot(x, y1, x, y2, x, y3, x, y4)
plt.show()
위 코드 실행 시 결과 화면은 아래와 같다.
만약 위에서 set_style("darkgrid)
를 하면 같은 어두운 배경에 격자무늬가 함께 표시된다.
여러 옵션을 변경해 다양한 그래프를 그려보자.
tips = sns.load_dataset("tips")
plt.figure(figsize=(8,6))
sns.boxplot(x=tips["total_bill"])
plt.show()
plt.figure(figsize=(8,6))
sns.boxplot(
x="day",
y="total_bill",
hue="smoker",
palette="Set3", # 지정된 색 조합으로 설정
data=tips
)
plt.show()
plt.figure(figsize=(8,6))
sns.swarmplot(
x="day",
y="total_bill",
data=tips,
color="0.5" # color 는 1일수록 하얀색, 0일수록 검은색
)
plt.show()
plt.figure(figsize=(8,6))
# boxplot 그리기
sns.boxplot(
x="day",
y="total_bill",
palette="Set3",
data=tips
)
# 그 위에 swarmplot 그리기
sns.swarmplot(
x="day",
y="total_bill",
data=tips,
color="0.5"
)
plt.show()
sns.lmplot(
x="total_bill",
y="tip",
data=tips,
hue="smoker",
height=10 # 그래프 크기
)
plt.show()
anscombe = sns.load_dataset("anscombe")
sns.set_style("darkgrid")
sns.lmplot(
x="x",
y="y",
data=anscombe.query("dataset == 'I'"),
ci=None, # ci 신뢰구간 영역 안보이게 함
# 잘보이기 위해 꾸밈 옵션
height=7,
scatter_kws={"s":80} # 마커 사이즈 변경
)
plt.show()
sns.set_style("darkgrid")
sns.lmplot(
x="x",
y="y",
data=anscombe.query("dataset == 'II'"), # 2차식 데이터
order=2, # 데이터의 차수에 따라 옵션 변경
ci=None,
height=7,
scatter_kws={"s":80}
)
plt.show()
sns.set_style("darkgrid")
sns.lmplot(
x="x",
y="y",
data=anscombe.query("dataset == 'III'"), # 아웃라이어가 있는 데이터
robust=True, # 원본에서 많이 떨어진 데이터는 없는 셈 친다
ci=None,
height=7,
scatter_kws={"s":80}
)
plt.show()
flights = sns.load_dataset("flights")
flights = flights.pivot_table(index="month", columns="year", values="passengers")
plt.figure(figsize=(10,6))
sns.heatmap(
data=flights,
annot=True, # annot=True 데이터 값 표시
fmt="d", # fmt="d" 정수형 표현
cmap="YlGnBu"
) ,
plt.show()
iris = sns.load_dataset("iris")
sns.pairplot(iris, hue="species")
plt.show()
sns.pairplot(
iris,
x_vars=["sepal_width", "sepal_length"],
y_vars=["petal_width", "petal_length"]
)
plt.show()