http://localhost:8888/notebooks/%EA%B7%B8%EB%9E%98%ED%94%84%20%EA%B7%B8%EB%A6%AC%EA%B8%B0%20%ED%95%84%EA%B8%B0.ipynb
In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
그래프 그리기
In [2]:
np.random.seed(2) #난수를 고정 랜덤을 해도 seed가 1인 랜덤 숫자의 패던을 로드 하겟다는 의미
In [3]:
x=np.arange(10)
In [4]:
y=np.random.rand(10)
In [5]:
print(x)
print(y)
[0 1 2 3 4 5 6 7 8 9]
그래프 작성
In [6]:
plt.plot(x,y)
plt.show()
3차 함수 그래프 만들기
In [7]:
def f(x):
return (x-2)*x*(x+2)
In [8]:
x=np.arange(-3,3.5,0.5) #같은 의미로 np.linspace(시작할범위,끝날범위,범위구간에서 몇개의 구간으로 나눌것인가?)
print(x)
그래프 작성
In [9]:
plt.plot(x,f(x))
plt.show()
그래프 좀더 자세하게 그리기
In [10]:
plt.plot(x,f(x),color ='black',label='$w=2$')
plt.legend(loc="upper left") #범례표시와 범례위치
plt.ylim(-15,15) #y축 범위
plt.title('$f(x)$') #제목
plt.xlabel('$x$') #x라벨
plt.ylabel('$y$') #y라벨
plt.grid(True) #그리드 설정 >> 표에 실선을 표시할건지?말건지 유(True)무(False)
plt.show()
그래프 영역 정하기
색다른 그래프 만들기¶
In [11]:
def f1(x0,x1):
r =2*x0**2+x1**2
ans = r*np.exp(-r)
return ans
In [12]:
xn =9
In [13]:
x0 = np.linspace(-2,2,xn)
x1=np.linspace(-2,2,xn)
y=np.zeros((len(x0),len(x1)))
In [14]:
for i0 in range(xn):
for i1 in range(xn):
y[i1,i0]=f1(x0[i0],x1[i1])
In [15]:
print(np.round(y,1))
1) pcolor 그래프 작성
In [16]:
plt.figure(figsize=(4,3))
plt.bone() #plt.gray():회색음영 , plt.jet():빨주노초파래트, plt.pink():핑크음영 , plt.bone():남색음영
plt.pcolor(y)
plt.colorbar()
plt.show()
2) surface 그래프
In [17]:
from mpl_toolkits.mplot3d import Axes3D
In [18]:
xx0,xx1 = np.meshgrid(x0,x1) # 2차원 배열을 만들어준다
In [19]:
plt.figure(figsize=(8,8))
ax=plt.subplot(1,1,1,projection='3d') # 3차원으로 만들려면 projection을 3d 라고 지정해줘야한다
ax.plot_surface(xx0,xx1,y,rstride=1,cstride=1,alpha=0.3,color='blue',edgecolor='black')
#rstride 와 cstride 는 자연수를 부여해 가로 및 세로로 몇개의 선을 긋는지 지정할수 잇다 수가 적을수록 간격이 조밀해진다
#alpha는 면의 불투명도를 의미한다 1에 가까울수록 불투명해진다
ax.set_zticks((0,0.2))
#z의 축의 눈금을 0과 0.2로 제한하고잇다
ax.view_init(70,-95)
#3차원 그래프의 방향을 조절해준다
#인수1은 상하 회전각도 0으로 지정하면 앞에서 본모양 90도는 위에서 본모양
#인수2는 좌우 회전각도 양수를 입력하면 시계방향으로 음수를 부여하면 반시계방향
plt.show()
3)contour 그래프 그리기(등고선)
In [20]:
xn=50
x0=np.linspace(-2,2,xn)
x1=np.linspace(-2,2,xn)
y=np.zeros((len(x0),len(x1)))
for i0 in range(xn):
for i1 in range(xn):
y[i1][i0]=f1(x0[i0],x1[i1])
In [21]:
xx0,xx1=np.meshgrid(x0,x1) # 2차원 배열을 만들어준다
In [22]:
plt.figure(1,figsize=(8,8))
cont=plt.contour(xx0,xx1,y,5,colors='black') #숫자 5는 등고선의 높이를 5단계로 주엇다
cont.clabel(fmt='%3.2f',fontsize=8) #등고선에 숫자을 넣는것을 지정한다
plt.xlabel('$x_0$',fontsize=14) #fontsize로 문자의 크기를 지정한다
plt.ylabel('$x_1$',fontsize=14) #fontsize로 문자의 크기를 지정한다
plt.show()