Ich möchte die VTK-Datei des zweidimensionalen Temperatursimulationsergebnisses mit jupyter anzeigen.
Lesen Sie die VTK-Datei mit Python, extrahieren Sie die Koordinatendaten und Temperaturdaten und zeigen Sie sie mit Matplotlib an.
OS: Windows 10 home edition
Tool: Anaconda(Python 3.7.4)
Mit der kostenlosen Finite-Elemente-Methode Freefem ++ haben wir die Wärmediffusionsgleichung gelöst und die resultierende VTK-Datei erstellt. Der Code der Wärmediffusionsgleichung verwendete Heat.edp des Beispiels. Ich werde weglassen, wie Freefem ++ installiert und ausgeführt wird. Die verwendete VTK-Datei wird in hier gespeichert.
Installieren Sie mit conda.
conda install vtk
Importieren Sie die für den Betrieb erforderlichen Numpy-, Matplotlib- und VTK-Bibliotheken.
import numpy as np
import maptlotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
Da die VTK-Datei ein nicht strukturiertes Raster war, lesen Sie sie mit Unstructured.
#Datei lesen
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
Die Koordinatendaten dieser VTK-Datei sind Punktdaten und die Temperaturdaten sind Zellendaten. Ich möchte eine Eins-zu-Eins-Beziehung zwischen den Koordinatendaten und den Temperaturdaten haben, also konvertiere ich sie alle in Punktdaten.
#Konvertieren von Zellendaten in Punktdaten
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
Lesen Sie die VTK-Datei und extrahieren Sie mit vtk_support die Koordinatendaten und Temperaturdaten aus den VTK-Daten.
#Numpy Konvertierung von Koordinaten und Temperaturdaten
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#verwende nicht. Alle sind 0, weil es das Ergebnis einer zweidimensionalen Wärmediffusionsgleichung ist.
#GetAbstractArray(0)Label, GetAbstractArray(1)Enthält Temperaturdaten.
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
Jetzt, da es fertig ist, müssen Sie es nur noch in Matplotlib anzeigen. Da es sich um unstrukturierte Daten handelt, wird die Farbkarte mit trikontourf angezeigt.
##Farbkartenausgabe
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
https://github.com/matsxxx/show_vtk_on_jupyter
import numpy as np
import matplotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
#Datei lesen
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
#Konvertieren von Zellendaten in Punktdaten
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
#Numpy Konvertierung von Koordinaten und Temperaturdaten
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#verwende nicht. Alle sind 0, weil es das Ergebnis einer zweidimensionalen Wärmediffusionsgleichung ist.
#GetAbstractArray(0)Label, GetAbstractArray(1)Enthält Temperaturdaten.
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
#Farbkartenausgabe
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
Für die VTK-Klasse ist die [Klassenreferenz] von c ++ (https://vtk.org/doc/nightly/html/index.html) für die Öffentlichkeit zugänglich. Die Struktur und der Name von Python VTK entsprechen der c ++ - Referenz, sodass Sie darauf verweisen können. Auf die folgenden Websites wurde hauptsächlich verwiesen.
https://vtk.org/doc/nightly/html/classvtkFieldData.html
https://vtk.org/doc/nightly/html/classvtkCellDataToPointData.html
https://stackoverflow.com/questions/23138112/vtk-to-matplotlib-using-numpy
https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.tricontourf.html