import matplotlib.pyplot as plt
# 기본 문법
plt.plot([1, 2, 3], [3, 6, 9])
plt.plot([1, 2, 3], [2, 4, 9])
plt.show()
plt.plot() 등의 명령문을 작성한뒤, plt.show()를 통해서 바로 플롯을 보거나, plt.savefig() 를 통해서 플롯을 파일로 저장
# 타이틀
plt.plot([1, 2, 3], [3, 6, 9])
plt.plot([1, 2, 3], [2, 4, 9])
# 타이틀 & font 설정
plt.title('이것은 타이틀 입니다')
plt.show()
plt.title('') 플롯의 타이틀을 작성
plt.plot([1, 2, 3], [3, 6, 9])
plt.plot([1, 2, 3], [2, 4, 9])
plt.title('Label 설정 예제입니다', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
plt.xlable(), plt.ylable() 플롯의 x축, y축의 label을 설정
# 범례(Legend) 설정
plt.plot(np.arange(10), np.arange(10)*2)
plt.plot(np.arange(10), np.arange(10)**2)
plt.plot(np.arange(10), np.log(np.arange(10)))
# 타이틀 & font 설정
plt.title('범례 설정 예제입니다', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
# legend 설정
plt.legend(['10 * 2', '10 ** 2', 'log'], fontsize=15)
plt.show()
plt.xticks(rotation=) plt.yticks() 플롯의 x축, y축에 눈금을 그어줍니다plt.legend([‘’,’’,...], fontsize=) 각 플롯에 대해서 범례를 설정합니다
# X와 Y의 한계점(Limit) 설정: xlim(), ylim()
plt.plot(np.arange(10), np.arange(10)*2)
plt.plot(np.arange(10), np.arange(10)**2)
plt.plot(np.arange(10), np.log(np.arange(10)))
# 타이틀 & font 설정
plt.title('이것은 타이틀 입니다', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
# legend 설정
plt.legend(['10 * 2', '10 ** 2', 'log'], fontsize=15)
# x, y limit 설정
plt.xlim(0, 5)
plt.ylim(0.5, 10)
plt.show()
plt.xlim(), plt.ylim() 플롯의 X축, Y축의 끝값들을 설정해줍니다plt.xlim(0, 5), plt.ylim(0.5, 10) 로 설정하였기 때문에
# 마커(marker)
# '.': point marker
# 'o': circle marker
# 'v': triangle_down marker
# '+': plus marker
# '*': star marker
# 라인(line)
# '-': solid line style
# '--': dashed line style
# '-.': dash-dot line style
# ':': dotted line style
# 컬러(color)
# 'b': blue
# 'g': green
# 'r': red
# 'c': cyan
# 'm': magenta
# 'y': yellow
# 'k': black
# 'w': white
# alpha를 통해 투명도를 조절할 수 있습니다.
plt.plot(np.arange(10), np.arange(10)*2, marker='o', linestyle='-',
color='b', alpha=.1)
plt.plot(np.arange(10), np.arange(10)*2 - 10, marker='v', linestyle='--',
color='c', alpha=.3)
plt.plot(np.arange(10), np.arange(10)*2 - 20, marker='+', linestyle='-.',
color='y', alpha=.8)
plt.plot(np.arange(10), np.arange(10)*2 - 30, marker='*', linestyle=':',
color='r', alpha=1.)
# 타이틀 & font 설정
plt.title('색상 설정 예제', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
plt.show()
marker나 markersize, linestyle, color, alpha
# Scatterplot: plt.scatter()
# x, y 좌표로 이뤄진 데이터들을 점으로 표현하는 plot입니다.
# s는 점의 넓이를 나타냅니다. 값이 커지면 당연히 넓이도 커집니다.
x = np.random.rand(50)
y = np.random.rand(50)
# 각 데이터점마다 class를 가지고 있는 경우, class를 color로도 표현할 수 있습니다.
colors = [0]*25 + [1]*25
area = x * y * 250
plt.scatter(x, y, s=area, c=colors)
plt.show()
plt.scatter(s=, c=) x, y 좌표로 이뤄진 데이터들을 점으로 표현하는 플롯s는 점 크기,c는 점 색깔을 조절
# Barplot: plt.bar()
x = ['Math', 'Programming', 'Data Science', 'Art', 'English', 'Physics']
y = [66, 80, 60, 50, 80, 10]
# plt.figure(figsize=(6, 3))
plt.bar(x, y, align='center', alpha=0.7, color='red')
plt.xticks(x)
plt.ylabel('Number of Students')
plt.title('Subjects')
plt.show()
plt.bar() 범주가 있는 데이터 값을 직사각형 막대로 표현하는 그래프width, align 등의 옵션으로 막대의 위치를 조정color, alpha 옵션을 이용해 각 막대의 색깔 조정
# Barhplot (축 변환): plt.barh()
# barh 함수에서는 xticks로 설정했던 부분을 yticks로 변경합니다.
x = ['Math', 'Programming', 'Data Science', 'Art', 'English',
'Physics']
y = [66, 80, 60, 50, 80, 10]
plt.barh(x, y, align='center', alpha=0.7, color='green')
plt.yticks(x)
plt.xlabel('Number of Students')
plt.title('Subjects')
plt.show()

# Barplot에서 비교 그래프 그리기
x_label = ['Math', 'Programming', 'Data Science', 'Art', 'English', 'Physics']
x = np.arange(len(x_label))
y_1 = [66, 80, 60, 50, 80, 10]
y_2 = [55, 90, 40, 60, 70, 20]
# 넓이 지정
width = 0.35
# subplots 생성
fig, axes = plt.subplots()
# 넓이 설정
axes.bar(x - width/2, y_1, width, align='center', alpha=0.5)
axes.bar(x + width/2, y_2, width, align='center', alpha=0.8)
# xtick 설정
plt.xticks(x)
axes.set_xticklabels(x_label)
plt.ylabel('Number of Students')
plt.title('Subjects')
plt.legend(['john', 'peter'])
plt.show()
plt.subplots()와 plt.bar나 plt.barh를 함께 사용하면 비교 그래프를 그릴 수 있음
N = 100000
bins = 30
x = np.random.randn(N)
plt.hist(x, bins=bins)
plt.show()
plt.hist() 히스토그램은 도수분포표를 그래프로 나타낸 것bins 옵션을 통해 히스토그램의 막대 개수를 조절 가능density=True인 경우에는 frequency 대신 density를 y축에 출력
# Piechart
labels = ['Samsung', 'Huawei', 'Apple', 'Xiaomi', 'Oppo', 'Etc']
sizes = [20.4, 15.8, 10.5, 9, 7.6, 36.7]
explode = (0.3, 0, 0, 0, 0, 0)
# texts, autotexts 인자를 활용하여 텍스트 스타일링을 적용합니다
patches, texts, autotexts = plt.pie(sizes,
explode=explode,
labels=labels,
# autopct='%.2f%%',
autopct='%.1f%%',
shadow=True,
startangle=90)
plt.title('Smartphone pie', fontsize=15)
# label 텍스트에 대한 스타일 적용
for t in texts:
t.set_fontsize(12)
t.set_color('gray')
# pie 위의 텍스트에 대한 스타일 적용
for t in autotexts:
t.set_color("white")
t.set_fontsize(18)
plt.show()
plt.pie() 파이 차트는 범주별 구성 비율을 원형으로 표현한 그래프explode 파이에서 툭 튀어져 나온 비율autopct 퍼센트 자동으로 표기 → '%.1f%%' 소수점 1자리까지 표기shadow 그림자 표시startangle 파이를 그리기 시작할 각도texts, autotexts인자를 리턴 → texts는 label에 대한 텍스트 효과를, autotexts는 파이 위에# Heatmap
import matplotlib.pyplot as plt
import numpy as np
arr = np.random.standard_normal((30, 40))
# 컬러맵 종류 지정
cmap = plt.get_cmap('PiYG')
# cmap = plt.get_cmap('BuGn')
# cmap = plt.get_cmap('Greys')
# cmap = plt.get_cmap('bwr')
plt.matshow(arr, cmap=cmap)
plt.colorbar(shrink=0.8, aspect=10)
plt.show()
plt.matshow() 히트맵은 다양한 값을 갖는 숫자데이터를 열분포 형태와 같이
# Colormaps
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
arr = np.random.standard_normal((8, 100))
plt.subplot(2, 2, 1)
plt.scatter(arr[0], arr[1], c=arr[1])
plt.viridis()
plt.title('viridis')
# colorbar() 함수를 사용하면 그래프 영역에 컬러바를 포함할 수 있습니다.
plt.colorbar()
plt.subplot(2, 2, 2)
plt.scatter(arr[2], arr[3], c=arr[3])
plt.plasma()
plt.title('plasma')
plt.colorbar()
plt.subplot(2, 2, 3)
plt.scatter(arr[4], arr[5], c=arr[5])
plt.jet()
plt.title('jet')
plt.colorbar()
plt.subplot(2, 2, 4)
plt.scatter(arr[6], arr[7], c=arr[7])
plt.nipy_spectral()
plt.title('nipy_spectral')
plt.colorbar()
plt.tight_layout()
plt.show()
matplotlib.pyplot 모듈은 컬러맵을 간편하게 설정하기 위한 여러 함수를 제공plt.plasma(), plt.jet()와 같은 함수를 이용해서 플롯에서 사용되는 색깔들을 다양하게 만들 수 있음
plt.text(x위치, y위치, 텍스트, fontdict)
plt.style.use()
plt.style.use(‘default’)plt.style.available 을 통해 사용 가능한 스타일 조회# Subplots: 여러개의 plot을 그리는 방법
import matplotlib.pyplot as plt
# plt.subplots(행의 갯수, 열의 갯수)
# data 생성
data = np.arange(1, 51)
# 밑 그림: 2행 3열
fig, axes = plt.subplots(2, 3)
axes[0, 0].plot(data)
axes[0, 1].plot(data * data)
axes[0, 2].plot(data ** 3)
axes[1, 0].plot(data % 10)
axes[1, 1].plot(-data)
axes[1, 2].plot(data // 20)
# axes
plt.tight_layout()
plt.show()
plt.subplots(행 개수, 열 개수) 하나의 화면 안에 여러 플롯을 넣을 수 있음fig, axes 를 plt.subplots()의 인자로 넣은 후 axex[행,열].plot명령어 를 입력해
# 이중 y축 표시하기
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('default')
plt.rcParams['figure.figsize'] = (8, 6)
plt.rcParams['font.size'] = 14
x = np.arange(0, 3)
y1 = x + 1
y2 = -x - 1
fig, ax1 = plt.subplots()
ax1.set_xlabel('X-Axis')
ax1.set_ylabel('1st Y-Axis')
line1 = ax1.plot(x, y1, color='green', label='1st Data')
ax2 = ax1.twinx() # twinx 사용
ax2.set_ylabel('2nd Y-Axis')
line2 = ax2.plot(x, y2, color='deeppink', label='2nd Data')
lines = line1 + line2
labels = [l.get_label() for l in lines]
ax1.legend(lines, labels, loc='upper right')
plt.show()
ax1.twinx()를 이용하여 ax1과 x축을 공유하는 새로운 axes 객체인 ax2 생성
# box plot
# 샘플 데이터 생성
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))
# 기본 박스플롯 생성
box = plt.boxplot(data, notch=True)
plt.tight_layout()
plt.show()
plt.boxplot() 수치 데이터의 분포를 표현notch=True 중앙값 (Median)의 95% 신뢰 구간을 노치 형태로 표시합니다
fig, ax = plt.subplots()
violin = ax.violinplot([data_a, data_b, data_c],
showmeans=True,
showextrema=True,
# showmedians=True,
quantiles=[[0.25, 0.75], [0.1, 0.9],
[0.3, 0.7]])
ax.set_ylim(-10.0, 10.0)
ax.set_xticks(np.arange(1, 4))
ax.set_xticklabels(['A', 'B', 'C'])
ax.set_xlabel('Data Type')
ax.set_ylabel('Value')
violin['bodies'][0].set_facecolor('blue')
violin['bodies'][1].set_facecolor('red')
violin['bodies'][2].set_facecolor('green')
violin['cbars'].set_edgecolor('gray')
violin['cmaxes'].set_edgecolor('gray')
violin['cmins'].set_edgecolor('gray')
violin['cmeans'].set_edgecolor('gray')
plt.show()
plt.violinplot() boxplot에 ked 곡선을 같이 그린 형태quantiles 옵션을 이용해 표시할 분위수 조절
tips = sns.load_dataset("tips")
# scatter plot
# 두개의 연속형 변수 total_bill과 tip간의 관계를 scatter plot으로 표현할수 있습니다
sns.relplot(data=tips, x="total_bill", y="tip")
sns.scatterplot(data=tips, x="total_bill", y="tip")

sns.relplot(
data=tips,
x="total_bill", y="tip", hue="smoker", style="time",size="size"
)

dowjones = sns.load_dataset("dowjones")
sns.relplot(data=dowjones, x="Date", y="Price", kind="line")
sns.lineplot(data=dowjones, x="Date", y="Price")
fmri = sns.load_dataset("fmri")
sns.lineplot(data=fmri, x="timepoint", y="signal")
lineplot 을 사용
표준편차의 범위로 표시하고싶으면 errorbar='sd'로 옵션 표시
sns.relplot(data=fmri, kind="line",x="timepoint", y="signal", errorbar=None,)

sns.relplot(
data=dots, kind="line",
x="time", y="firing_rate",
hue="coherence", style="choice",
)
hue 통해서 연속형 변수 또한 구분하여 lineplot을 그릴 수 있음
sns.relplot(x="total_bill", y="tip", hue="smoker", col="time", data=tips)

sns.relplot(x="timepoint", y="signal", hue="subject",
col="region", row="event", height=3.5,
kind="line", estimator=None, data=fmri)

penguins = sns.load_dataset("penguins")
sns.histplot(penguins, x="flipper_length_mm")
sns.displot(penguins, x="flipper_length_mm")
binwidth , bins 를 사용해 조절discrete=True 옵션을 통해 x축 값 중앙에 막대가 오도록 조절shrink 옵션을 통해 막대 간 공간 조절 가능
# histogram의 막대 너비는 binwidth 혹은 bins를 사용해 조절해줄 수 있습니다
sns.displot(penguins, x="flipper_length_mm", bins=20)
# 변수가 이산형 변수인 경우, discrete=True 옵션을 통해
#x축 값 중앙에 막대가 위치하도록 할 수 있습니다
sns.displot(tips, x="size", discrete=True)
# 또한, shrink 옵션을 통해 막대 간 공간 조절이 가능합니다
sns.displot(tips, x="size", discrete=True, shrink=.7)
sns.displot(penguins, x="flipper_length_mm", hue="species", element="step")
hue 옵션을 통해 추가 변수를 조건으로 한 분포를 시각화element=step 옵션을 사용하거나 multiple={stack, dodge} 옵션을 사용 가능
sns.displot(penguins, x="flipper_length_mm", col="sex")

sns.displot(penguins, x="flipper_length_mm", hue="species", stat="probability")
stats='probability' 옵션을 통해 모든 막대의 높이의 합이 1이 되게 만들 수 있으며sns.kdeplot(penguins, x="flipper_length_mm")
sns.displot(penguins, x="flipper_length_mm", kind="kde", bw_adjust=.25)
bw_adjust를 이용해 곡선을 세밀하게 혹은 더 부드럽게 표현이 가능
sns.displot(penguins, x="flipper_length_mm", hue="species", kind="kde")

# 또한, fill=True 옵션을 이용해 곡선 아래 색칠된 형태로 표현이 가능합니다
sns.displot(penguins, x="flipper_length_mm", hue="species", kind="kde", fill=True)
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm")

sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", kind="kde")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", kind="kde",
thresh=.2, levels=4)

sns.jointplot(data=penguins, x="bill_length_mm", y="bill_depth_mm")

sns.pairplot(penguins)
sns.catplot(data=tips, x="day", y="total_bill")

sns.catplot(data=tips, x="day", y="total_bill", kind="swarm")
sns.catplot(data=tips.loc[tips['size']!=3], x="size",
y="total_bill")
sns.catplot(data=tips.loc[tips['size']!=3], x="size",
y="total_bill", native_scale=True)
order 옵션을 사용해서 Categorical 변수의 순서를 바꿀 수 있음sns.catplot(data=tips, x="day", y="total_bill", kind="box")

sns.violinplot(
data=tips, x="total_bill", y="day", hue="sex",
)
sns.catplot(
data=tips, x="total_bill", y="day", hue="sex", kind="violin",
)

sns.catplot(data=titanic, x="sex", y="survived", hue="class", kind="bar")

sns.catplot(data=titanic, x="sex", y="survived", hue="class", kind="point")
