import matplotlib.pyplot as plt
import numpy as np
#난수를 예측 가능하도록 만드는 함수 seed
np.random.seed(0)
n_data = 100
s_idx = 30
#연속값이 들어가는 넘파이의 배열
x_data = np.arange(s_idx, s_idx + n_data)
y_data = np.random.normal(0,1, (n_data))
fig, ax = plt.subplots(figsize= (10, 5))
ax.plot(x_data, y_data)
#pad -> 패딩값, 여백
fig.tight_layout(pad=3)
#30시작으로 131까지. 20 간격으로 값을 뽑겠다는 의미
x_ticks = np.arange(s_idx, s_idx + n_data + 1, 20)
#
ax.set_xticks(x_ticks)
ax.tick_params(labelsize=25)
ax.grid()
plt.show()
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
#array - numpy array로 만들어줌
x_data = np.array([10, 25, 31, 40, 55, 80, 100])
#scalar: (), 0차 tensor(shape)
#vector: (a, ),1차 tensor(shape)
#matrix: (a,b), 2차 tensor(shape)
#에러 방지를 위한 습관들이기
y_data = np.random.normal(0, 1, (7, ))
fig, ax = plt.subplots(figsize = (10,5))
ax.plot(x_data, y_data)
fig.subplots_adjust(left=0.2)
ax.tick_params(labelsize=25)
#----
ax.set_xticks(x_data)
#ylim: y축의 양 끝값을 가져오는 것
ylim = ax.get_ylim()
print(ylim)
#ylim의 시작값(0)과 끝점(1)인 인덱스를 가져온 것
yticks = np.linspace(ylim[0], ylim[1], 8)
ax.set_yticks(yticks)
ax.grid()
plt.show()
import matplotlib.pyplot as plt
import numpy as np
#PI 값을 지정해주어 호출해주는 것
PI = np.pi
#linsapce: min / max
t= np.linspace(-4*PI, 4*PI, 300)
#사인 함수 호출
sin = np.sin(t)
#y = ax 그래프를 그려주는 것
linear = 0.1*t
fig, ax = plt.subplots(figsize=(14, 7))
ax.plot(t, sin)
#선 그래프
ax.plot(t, linear)
ax.set_ylim([-1.5, 1.5])
x_ticks = np.arange(-4*PI, 4*PI+0.1, PI)
#PI값을 써준것
#질문 및 복습
x_ticklabels = [str(i) + r'$\pi$'
for i in range(-4,5)]
ax.set_xticks(x_ticks)
ax.set_xticklabels(x_ticklabels)
ax.tick_params(labelsize=20)
ax.grid()
plt.show()
import matplotlib.pyplot as plt
import numpy as np
PI = np.pi
t = np.linspace(-4*PI, 4*PI, 1000)
sin = np.sin(t)
cos = np.cos(t)
tan = np.tan(t)
#tan 그래프를 그릴 수 없기 때문에 만들어주는 함수
#트릭을 활용해 불완전한 tan 그래프를 완성시킨다
tan[:-1][np.diff(tan) < 0] = np.nan
#nrows: 행의 개수 #ncols: 열의 개수
# 3,1 짜리 행렬을 만들어주는 axes 생성
fig, axes = plt.subplots(3, 1,
figsize=(7, 10))
print(axes.shape)
axes[0].plot(t, sin)
axes[1].plot(t, cos)
axes[2].plot(t, tan)
fig.tight_layout()
#tan 그래프의 범위를 설정
axes[2].set_ylim([-5,5])
plt.show()
#np.diff: 차이를 계산해주는 함수
y[:-1][np.diff(y) < 0] = np.nan #not a number
[:-1]:불리안 인덱싱 하나의 값을 뺴주어서 개수를 맞춰준다
import matplotlib.pyplot as plt
import numpy as np
PI = np.pi
#reshape: shape를 바꿔준다. (1000, ) 에서 (1,1000)으로 바꿔줌
#질문해야 할듯?
t = np.linspace(-4*PI, 4*PI, 1000).reshape(1, -1)
sin = np.sin(t)
cos = np.cos(t)
tan = np.tan(t)
#각각의 데이터들을 차례대로 접근해 수정하기 위해 행렬의 형태로 바꿔주는 것
#(3,1000)짜리 행렬이 만들어지게 됨
#vertical stack: 수직방향으로 쌓아준다. cf) hstack: horizonal
data = np.vstack((sin, cos, tan))
#결과적으로 matrix의 행렬은 (3,1000)형태가 될듯
title_list = [r'$sin(t)$', r'$cos(t)$', r'$tan(t)$']
x_ticks = np.arange(-4*PI, 4*PI+PI, PI)
x_ticklabels = [str(i) + r'$\pi$' for i in range(-4,5)]
fig, axes = plt.subplots(3, 1,
figsize=(7, 10),
sharex=True)
for ax_idx, ax in enumerate(axes.flat):
#flatten을 통해 vectorization을 해주는 것
ax.plot(t.flatten(), data[ax_idx])
ax.set_title(title_list[ax_idx],
fontsize=30)
ax.tick_params(labelsize=20)
ax.grid()
if ax_idx == 2:
ax.set_ylim([-3, 3])
fig.subplots_adjust(left=0.1, right=0.95,
bottom=0.05, top=0.95)
axes[-1].set_xticks(x_ticks)
axes[-1].set_xticklabels(x_ticklabels)
plt.show()
수평 점근선
import matplotlib.pyplot as plt
import numpy as np
#점근선 그려보기
fig, ax = plt.subplots(figsize=(7, 7))
ax.set_xlim([-5, 5])
ax.set_ylim([-5, 5])
ax.axvline(x=1,
color='black',
linewidth=1)
ax.axvline(x=1,
ymax=0.8, ymin=0.2,
color='black',
linewidth=1)
plt.show()
수직 점근선
import matplotlib.pyplot as plt
import numpy as np
#점근선 그려보기
fig, ax = plt.subplots(figsize=(7, 7))
ax.set_xlim([-5, 5])
ax.set_ylim([-5, 5])
ax.axhline(x=1,
color='black',
linewidth=1)
ax.axhline(x=1,
ymax=0.8, ymin=0.2,
color='black',
linewidth=1)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
#점근선 그려보기
x = np.linspace(-4*np.pi, 4*np.pi, 200)
sin = np.sin(x)
fig, ax = plt.subplots(figsize=(10,5))
ax.plot(x, sin)
#ls: line style / lw:line width
ax.axhline(y=1, ls=':', lw=1, color='gray')
ax.axhline(y=-1, ls=':', lw=1, color='gray')
legend 삽입하기
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
n_data = 100
random_noise1 = np.random.normal(0, 1, (n_data,))
random_noise2 = np.random.normal(1, 1, (n_data,))
random_noise3 = np.random.normal(2, 1, (n_data,))
fig, ax = plt.subplots(figsize=(10, 7))
ax.tick_params(labelsize=20)
#랜덤한 노이즈 값을 집어넣어줌
ax.plot(random_noise1,label='random noise1')
ax.plot(random_noise2,label='random noise2')
ax.plot(random_noise3,label='random noise3')
ax.legend(fontsize=20)
plt.show()
legend의 위치
# 위 내용과 같음""
#레전드 삽입을 통해 위치를 설정해줄 수 있음
ax.legend(fontsize=20, loc='upper right')
plt.show()
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
n_data = 100
random_noise1 = np.random.normal(0, 1, (n_data,))
random_noise2 = np.random.normal(1, 1, (n_data,))
random_noise3 = np.random.normal(2, 1, (n_data,))
fig, ax = plt.subplots(figsize=(10, 7))
ax.tick_params(labelsize=20)
#랜덤한 노이즈 값을 집어넣어줌
ax.plot(random_noise1,label='random noise1')
ax.plot(random_noise2,label='random noise2')
ax.plot(random_noise3,label='random noise3')
#x를 기준으로 레전드를 찍어주는데 반해, bbox를 선언할 시 bbox가 중심이 됨
ax.legend(fontsize=20, bbox_to_anchor = (1, 0.5),
loc='center left')
#그래프가 짤리지 않게 방지해주는 효과
fig.tight_layout()
plt.show()
bbox를 선언할 시. bbox 중심으로 선언해줄 수 있음
레전드 라벨링을 통한 데이터 삽입
import matplotlib.pyplot as plt
import numpy as np
PI = np.pi
t = np.linspace(-4*PI, 4*PI, 300)
sin = np.sin(t)
fig, ax = plt.subplots(figsize=(10,10))
for ax_idx in range(12):
label_template = 'added by {}'
print(label_template)
print(label_template.format(ax_idx))
ax.plot(t, sin+ax_idx,
label=label_template.format(ax_idx))
ax.legend(fontsize=15,
ncol=4,
bbox_to_anchor=(0.5, -0.05),
loc='upper center')
#그래프가 짤리지 않게 방지해주는 효과
fig.tight_layout()
plt.show()
바이올린 플롯
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
fig, ax = plt.subplots(figsize=(7, 7))
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(5, 2, 200)
data3 = np.random.normal(13, 3, 300)
xticks = np.arange(3)
ax.violinplot([data1, data2, data3], positions=xticks)
ax.set_xticks(xticks)
ax.set_xticklabels(['setosa', 'versicolor', 'virginica'])
ax.set_xlabel('species', fontsize=15)
ax.set_xlabel('Values', fontsize=15)
#그래프가 짤리지 않게 방지해주는 효과
fig.tight_layout()
plt.show()
평균이 나타난 바이올린 플롯
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
fig, ax = plt.subplots(figsize=(7, 7))
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(5, 2, 200)
data3 = np.random.normal(13, 3, 300)
xticks = np.arange(3)
ax.violinplot([data1, data2, data3],
showmeans=True,
positions=xticks)
ax.set_xticks(xticks)
ax.set_xticklabels(['setosa', 'versicolor', 'virginica'])
ax.set_xlabel('species', fontsize=15)
ax.set_xlabel('Values', fontsize=15)
#그래프가 짤리지 않게 방지해주는 효과
fig.tight_layout()
plt.show()
사분위가 나타난 바이올린 플롯
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
fig, ax = plt.subplots(figsize=(7, 7))
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(5, 2, 200)
data3 = np.random.normal(13, 3, 300)
xticks = np.arange(3)
ax.violinplot([data1, data2, data3],
showmeans=True,
positions=xticks)
ax.set_xticks(xticks)
ax.set_xticklabels(['setosa', 'versicolor', 'virginica'])
ax.set_xlabel('species', fontsize=15)
ax.set_xlabel('Values', fontsize=15)
#그래프가 짤리지 않게 방지해주는 효과
fig.tight_layout()
plt.show()
색 입혀진 바이올린 플롯
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(5, 2, 200)
data3 = np.random.normal(13, 3, 300)
fig, ax = plt.subplots(figsize=(7, 7))
xticks = np.arange(3)
violin = ax.violinplot([data1, data2, data3], showmeans=True, positions=xticks)
ax.set_xticks(xticks)
ax.set_xticklabels(['setosa', 'versicolor', 'virginica'])
ax.set_xlabel('species', fontsize=15)
ax.set_xlabel('Values', fontsize=15)
violin['bodies'][0].set_facecolor('blue')
violin['bodies'][0].set_facecolor('red')
violin['bodies'][0].set_facecolor('green')
violin['cbars'].set_edgecolor('gray')
violin['cmaxes'].set_edgecolor('gray')
violin['cmins'].set_edgecolor('gray')
violin['cmeans'].set_edgecolor('gray')
fig.tight_layout()
plt.show()
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
#아이리스 로드하기
iris = load_iris()
#dir: 객체가 갖고 있는 attribute를 가져오는 것
#객체 : 데이터에 메소드가 작동하는 것
for attr in dir(iris):
print(attr)
print(iris.target_names)
feature_names = iris.feature_names
n_feature = len(feature_names)
species = iris.target_names
n_species = len(species)
#행렬: 대문자 X ->
#타겟데이터: y: vector로 연산
iris_X, iris_y = iris.data, iris.target