기본 콘텐츠로 건너뛰기

pandas_ta를 적용한 통계적 인덱스 지표

[matplotlib] 등고선(Contour)

등고선(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.  ]]))

댓글