본문 바로가기
Python Library/Matplotlib

[Matplotlib] triangular grid

by goatlab 2022. 2. 22.
728x90
반응형
SMALL

triangular grid

 

Matplotlib 버전 1.3부터는 삼각 그리드 (triangular grid)에 대한 지원이 추가되었다. 삼각 그리드를 사용하연 기존의 사각형 영역 뿐 아니라 임의의 영역에 대해서 컨투어 플롯이나 서피스 플롯을 그릴 수 있으므로 정의역 (domain)이 직사각형이 아닌 2차원 함수도 시각화 할 수 있다.

 

패키지

 

삼각 그리드 지원을 위한 코드 중 일부는 tri 서브 패키지 아래에 있으므로 미리 임포트한다.

 

import matplotlib.tri as mtri
 

삼각 그리드 클래스

 

 

삼각 그리드 생성

 

삼각 그리드는 Triangulation 클래스로 생성한다. Triangulation 클래스는 x. y, triangles 세 개의 인수를 받는데 x, y는 일련의 점들의 x좌표와 y좌표를 나타내는 1차원 벡터들이고 triangles는 이 점들에 대한 기하학적 위상 정보 즉, 어떤 삼각형이 있으며 각 삼각형이 어떤 점들로 이루어져있는가를 보인다. 만약 triangles가 주어지지 않으면 자동으로 생성한다.

 

x = np.array([0, 1, 2])
y = np.array([0, np.sqrt(3), 0])
triangles = [[0, 1, 2]]
triang = mtri.Triangulation(x, y, triangles)
plt.title("삼각 그리드")
plt.triplot(triang, 'ko-')
plt.xlim(-0.1, 2.1)
plt.ylim(-0.1, 1.8)
plt.show()
x = np.asarray([0, 1, 2, 3, 4, 2])
y = np.asarray([0, np.sqrt(3), 0, np.sqrt(3), 0, 2*np.sqrt(3)])
triangles = [[0, 1, 2], [2, 3, 4], [1, 2, 3], [1, 3, 5]]
triang = mtri.Triangulation(x, y, triangles)
plt.title("여러개의 삼각형 그리기")
plt.triplot(triang, 'ko-')
plt.xlim(-0.1, 4.1)
plt.ylim(-0.1, 3.7)
plt.show()

 

그리드 세분화

 

그리드를 더 세분화하려면 TriRefiner 또는 UniformTriRefiner를 사용한다.

 

refiner = mtri.UniformTriRefiner(triang)
triang2 = refiner.refine_triangulation(subdiv=2)
plt.title("그리드 세분화")
plt.triplot(triang2, 'ko-')
plt.xlim(-0.1, 4.1)
plt.ylim(-0.1, 3.7)
plt.show()

 

그리드 플롯

 

그리드상에 tricontour, tricontourf, plot_trisur , plot_trisurf 등의 명령을 사용하여 2차원 등고선 (coutour) 플롯이나 3차원 표면 (surface) 플롯을 그릴 수 있다.

 

triang5 = refiner.refine_triangulation(subdiv=5)
z5 = np.cos(1.5*triang5.x)*np.cos(1.5*triang5.y)
plt.title("삼각 그리드에서의 3차원 데이터 시각화")
plt.tricontourf(triang5, z5, cmap="gray")
plt.show()

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm

triang3 = refiner.refine_triangulation(subdiv=3)
z3 = np.cos(1.5 * triang3.x) * np.cos(1.5 * triang3.y)

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_title("삼각 그리드에서의 3D Surface Plot")
ax.plot_trisurf(triang3.x, triang3.y, z3, cmap=cm.jet, linewidth=0.2)
ax.tricontourf(triang3, z3, zdir='z', offset=-1.2, cmap=cm.coolwarm)
ax.set_zlim(-1, 1)
ax.view_init(40, -40)
plt.show()

 

https://datascienceschool.net/01%20python/05.03%20%EB%A7%B7%ED%94%8C%EB%A1%AF%EB%A6%AC%EB%B8%8C%EC%9D%98%20%EC%82%BC%EA%B0%81%20%EA%B7%B8%EB%A6%AC%EB%93%9C%20%EC%82%AC%EC%9A%A9%EB%B2%95.html

 

Matplotlib의 triangular grid 사용법 — 데이터 사이언스 스쿨

.ipynb .pdf to have style consistency -->

datascienceschool.net

 

728x90
반응형
LIST