본문 바로가기
프로그래밍 언어/Python 3

[Python3] Matplotlib - contour plot

by Physics 2021. 5. 4.
728x90

문제:

z = f(x,y)란 함수 z의 contour plot을 그린다고 가정하자. 

1. Contour() vs Contourf() 

(1) Contour() :  등고선만 표시 
(2) Contourf() : 색상 표시 
위 함수의 차이는 아래의 그림을 보면 확실히 알 수 있다. 

 

2. Documents for contour() and contourf() function

- website : matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contour.html

 

3. contour() 함수 이용방법

Matplotlib의 contour plot을 그리는 함수인 contour() 함수를 사용하기 위해선 몇가지 단계가 있다.

1) plotting하고자 하는 영역에 대해 x와 y의 mesh grid를 생성 
  (1) 그리길 원하는 영역 내의 x와 y의 범위를 정한다. 
  (2) 해당 영역을 numpy 내의 함수를 이용하여 균일한 크기로 쪼갠다: 
      - xrange = np.linspace(xmin, xmax, 100)
      - yrange = np.linspace(ymin, ymax, 100)
  (3) 해당 영역을 이용하여 mesh*를 생성한다. 
      * mesh: x의 배열과 y의 배열로 이루어진 (x,y) grid 
      - xmesh, ymesh = np.meshgrid(xrange, yrange) 

2) 해당 mesh의 각각의 점들에 대응되는 함수 f(x,y)를 계산 
  -
Zmesh = f(xmesh, ymesh) 

  - 위의 코드가 정상적으로 작동하기 위해선, f(x,y) 함수가 vectorization이 가능해야 한다. 만일 그렇지 않으면, 계산이 되지 않는다. 
  - Vectorization이 되지 않는 함수에 대해서 아래 함수를 적용하여 vectorization이 되도록 한다. 
    : g = np.vectorize(f) 
  - 그 후, 함수 g를 이용하여 각각의 mesh point에 대응되는 값을 얻는다. 
    : Zmesh = g(xmesh, ymesh) 

3) matplotlib를 이용하여 contour plot을 그린다. 
  : plt.contour(xmesh, ymesh, zmesh) 

위의 과정을 한번에 쓰면 아래와 같다. 

def f(x,y):
    return x ** 2 + y ** 2

xrange = np.linspace(-10,10.,100)
yrange = np.linspace(-10,10.,100)
xmesh, ymesh = np.meshgrid(xrange, yrange) 

zmesh = f(xmesh, ymesh)

plt.contour(xmesh, ymesh, zmesh, levels=15)
cntr = plt.contourf(xmesh, ymesh, zmesh, levels=15, cmap="RdBu_r")

결과는 위에서 나온 그림 (c)와 같다. 

728x90

댓글