VTK 파일을 읽고 jupyter로 컬러맵 표시를 한다.
10378 단어 FreeFem++파이썬matplotlibvtkJupyter
소개
무엇을 하고 싶은가
2 차원 온도 시뮬레이션 결과의 VTK 파일을 jupyter로 표시하고 싶습니다.
어떻게?
VTK 파일을 Python으로 읽고 좌표 데이터와 온도 데이터를 검색하고 Matplotlib로 표시합니다.
환경
OS: Windows 10 home edition
도구: Anaconda(Python 3.7.4)
시뮬레이션 결과 VTK 파일
유한 요소법 프리 소프트웨어인 Freefem++을 이용하여 열확산 방정식을 풀고 결과 VTK 파일을 만들었다. 열 확산 방정식 부호는 example Heat.edp를 이용했다. Freefem++의 설치와 실행 방법은 생략한다. 이용한 VTK 파일은, 여기 에 둔다.
Python VTK 라이브러리 설치
conda를 사용하여 설치합니다.
conda install vtk
import 관계
작업에 필요한 Numpy, Matplotlib, VTK 라이브러리를 가져옵니다.
import numpy as np
import maptlotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
VTK 파일 불러오기
VTK 파일이 비구조 격자였기 때문에 Unstructured로 읽어들입니다.
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
온도를 셀 데이터를 포인트 데이터로 변환
이번 VTK 파일의 좌표 데이터가 Point Data이고 온도 데이터가 Cell Data입니다. 좌표 데이터와 온도 데이터를 일대일의 관계로 하고 싶기 때문에, 전부 Point Data로 변환한다.
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
변환된 데이터에서 좌표 및 온도 데이터 추출
VTK 파일을 읽고 vtk_support를 사용하여 VTK 데이터에서 좌표 데이터와 온도 데이터를 검색합니다.
#座標と温度データのnumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
Matplotlib에서 컬러맵 표시
준비가 되었으므로, 나머지는 Matplotlib로 표시할 뿐이다. 비구조 데이터이기 때문에 tricontourf를 이용하여 컬러맵을 표시한다.
##カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
모든 코드
import numpy as np
import matplotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
#座標と温度データのNumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
#カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
참고
VTK 클래스는 c++의 클래스 참조이 공개되어 있다. Python VTK의 구조와 이름은 c++ 참조와 동일하므로 참고할 수 있습니다. 주로 참고로 한 아래 사이트입니다.
OS: Windows 10 home edition
도구: Anaconda(Python 3.7.4)
시뮬레이션 결과 VTK 파일
유한 요소법 프리 소프트웨어인 Freefem++을 이용하여 열확산 방정식을 풀고 결과 VTK 파일을 만들었다. 열 확산 방정식 부호는 example Heat.edp를 이용했다. Freefem++의 설치와 실행 방법은 생략한다. 이용한 VTK 파일은, 여기 에 둔다.
Python VTK 라이브러리 설치
conda를 사용하여 설치합니다.
conda install vtk
import 관계
작업에 필요한 Numpy, Matplotlib, VTK 라이브러리를 가져옵니다.
import numpy as np
import maptlotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
VTK 파일 불러오기
VTK 파일이 비구조 격자였기 때문에 Unstructured로 읽어들입니다.
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
온도를 셀 데이터를 포인트 데이터로 변환
이번 VTK 파일의 좌표 데이터가 Point Data이고 온도 데이터가 Cell Data입니다. 좌표 데이터와 온도 데이터를 일대일의 관계로 하고 싶기 때문에, 전부 Point Data로 변환한다.
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
변환된 데이터에서 좌표 및 온도 데이터 추출
VTK 파일을 읽고 vtk_support를 사용하여 VTK 데이터에서 좌표 데이터와 온도 데이터를 검색합니다.
#座標と温度データのnumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
Matplotlib에서 컬러맵 표시
준비가 되었으므로, 나머지는 Matplotlib로 표시할 뿐이다. 비구조 데이터이기 때문에 tricontourf를 이용하여 컬러맵을 표시한다.
##カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
모든 코드
import numpy as np
import matplotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
#座標と温度データのNumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
#カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
참고
VTK 클래스는 c++의 클래스 참조이 공개되어 있다. Python VTK의 구조와 이름은 c++ 참조와 동일하므로 참고할 수 있습니다. 주로 참고로 한 아래 사이트입니다.
conda를 사용하여 설치합니다.
conda install vtk
import 관계
작업에 필요한 Numpy, Matplotlib, VTK 라이브러리를 가져옵니다.
import numpy as np
import maptlotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
VTK 파일 불러오기
VTK 파일이 비구조 격자였기 때문에 Unstructured로 읽어들입니다.
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
온도를 셀 데이터를 포인트 데이터로 변환
이번 VTK 파일의 좌표 데이터가 Point Data이고 온도 데이터가 Cell Data입니다. 좌표 데이터와 온도 데이터를 일대일의 관계로 하고 싶기 때문에, 전부 Point Data로 변환한다.
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
변환된 데이터에서 좌표 및 온도 데이터 추출
VTK 파일을 읽고 vtk_support를 사용하여 VTK 데이터에서 좌표 데이터와 온도 데이터를 검색합니다.
#座標と温度データのnumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
Matplotlib에서 컬러맵 표시
준비가 되었으므로, 나머지는 Matplotlib로 표시할 뿐이다. 비구조 데이터이기 때문에 tricontourf를 이용하여 컬러맵을 표시한다.
##カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
모든 코드
import numpy as np
import matplotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
#座標と温度データのNumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
#カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
참고
VTK 클래스는 c++의 클래스 참조이 공개되어 있다. Python VTK의 구조와 이름은 c++ 참조와 동일하므로 참고할 수 있습니다. 주로 참고로 한 아래 사이트입니다.
import numpy as np
import maptlotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
VTK 파일이 비구조 격자였기 때문에 Unstructured로 읽어들입니다.
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
온도를 셀 데이터를 포인트 데이터로 변환
이번 VTK 파일의 좌표 데이터가 Point Data이고 온도 데이터가 Cell Data입니다. 좌표 데이터와 온도 데이터를 일대일의 관계로 하고 싶기 때문에, 전부 Point Data로 변환한다.
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
변환된 데이터에서 좌표 및 온도 데이터 추출
VTK 파일을 읽고 vtk_support를 사용하여 VTK 데이터에서 좌표 데이터와 온도 데이터를 검색합니다.
#座標と温度データのnumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
Matplotlib에서 컬러맵 표시
준비가 되었으므로, 나머지는 Matplotlib로 표시할 뿐이다. 비구조 데이터이기 때문에 tricontourf를 이용하여 컬러맵을 표시한다.
##カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
모든 코드
import numpy as np
import matplotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
#座標と温度データのNumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
#カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
참고
VTK 클래스는 c++의 클래스 참조이 공개되어 있다. Python VTK의 구조와 이름은 c++ 참조와 동일하므로 참고할 수 있습니다. 주로 참고로 한 아래 사이트입니다.
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
VTK 파일을 읽고 vtk_support를 사용하여 VTK 데이터에서 좌표 데이터와 온도 데이터를 검색합니다.
#座標と温度データのnumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
Matplotlib에서 컬러맵 표시
준비가 되었으므로, 나머지는 Matplotlib로 표시할 뿐이다. 비구조 데이터이기 때문에 tricontourf를 이용하여 컬러맵을 표시한다.
##カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
모든 코드
import numpy as np
import matplotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
#座標と温度データのNumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
#カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
참고
VTK 클래스는 c++의 클래스 참조이 공개되어 있다. Python VTK의 구조와 이름은 c++ 참조와 동일하므로 참고할 수 있습니다. 주로 참고로 한 아래 사이트입니다.
##カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
import numpy as np
import matplotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
#座標と温度データのNumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
#カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
참고
VTK 클래스는 c++의 클래스 참조이 공개되어 있다. Python VTK의 구조와 이름은 c++ 참조와 동일하므로 참고할 수 있습니다. 주로 참고로 한 아래 사이트입니다.
Reference
이 문제에 관하여(VTK 파일을 읽고 jupyter로 컬러맵 표시를 한다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/matsxxx/items/b4e1c87d6f2a6ca001d6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)