등고선(contour)
등고선(등치선도)는 2차원 좌표계에서 같은 높이를 가지는 부분을 선으로 이어서 그린 것을 나타냅니다. 그러므로 좌표상의 높이 (또는 z 값)의 분포를 직관적으로 나타낼 수 있습니다.
격자형 데이터
등고선 작성시 x, y 축의 일정한 간격을 위해 np.meshgrid() 함수를 적용하여 격자형 데이터를 준비해야 합니다.
import numpy as np import matplotlib.pyplot as plt
def decorate_plot(xlab, ylab, title=None, size=(4,3)): plt.figure(figsize=size) plt.xlabel(xlab) plt.ylabel(ylab) plt.title(title)
size=100 x = np.linspace(-2, 2, size) y = np.linspace(-1.5, 1.5, size) X, Y=np.meshgrid(x, y) # 1차원인 객체를 2차원의 동일한 shape를 가진 객체로 변환 Z=X * np.exp(-X**2-Y**2)
- contour(x, y, 높이, levels): levels는 등고선의 수를 의미합니다.
- fcontour(x, y, 높이, levels): 색상으로 채워지는 등고선을 작성
decorate_plot("X", "Y") plt.contour(X, Y, Z, levels=10, linewidths=1, linestyles="--") plt.colorbar(shrink=0.5) plt.show()
decorate_plot("X", "Y") plt.contourf(X, Y, Z, levels=100, cmap="jet") plt.colorbar(shrink=0.5) plt.show()
np.meshgrid()
x=np.linspace(0, 5, 5) y=np.linspace(5, 10, 5) decorate_plot("x","y") plt.scatter(x, y, s=50) plt.show()
x.shape, y.shape
((5,), (5,))
X, Y=np.meshgrid(x, y) decorate_plot("X","Y") plt.scatter(X, Y, s=50) plt.show()
X.shape, Y.shape
((5, 5), (5, 5))
x, X
(array([0. , 1.25, 2.5 , 3.75, 5. ]), array([[0. , 1.25, 2.5 , 3.75, 5. ], [0. , 1.25, 2.5 , 3.75, 5. ], [0. , 1.25, 2.5 , 3.75, 5. ], [0. , 1.25, 2.5 , 3.75, 5. ], [0. , 1.25, 2.5 , 3.75, 5. ]]))
y, Y
(array([ 5. , 6.25, 7.5 , 8.75, 10. ]), array([[ 5. , 5. , 5. , 5. , 5. ], [ 6.25, 6.25, 6.25, 6.25, 6.25], [ 7.5 , 7.5 , 7.5 , 7.5 , 7.5 ], [ 8.75, 8.75, 8.75, 8.75, 8.75], [10. , 10. , 10. , 10. , 10. ]]))
댓글
댓글 쓰기