Ich wollte die 3D-Partikelsimulation mit der Python-Visualisierungsbibliothek Matplotlib visualisieren.

Als ich versuchte, 3D-Scatter-Plot mit matplotlib zu verwenden, war der Artikel, dass die Version auf dem Server alt war, Hajimaruyo (langsame Stimme)

zunaechst

Ich wollte die Visualisierung von numerischen Teilchenberechnungen in 3D cool machen. Speziell 00000.png 00010.png 00020.png 00030.png 00040.png ↑ Ich wollte so etwas machen. Selbst wenn ich ein erstklassiger Gnuplot-Lehrer war, wollte ich es mit Gnuplot machen, aber Andererseits wollte ich manchmal einen anderen Plotter verwenden, also versuchte ich mein Bestes, um es mit matplotlib zu machen.

matplotlib

matplotlib ist eine Visualisierungsbibliothek, die unter Python ausgeführt wird. Klicken Sie hier für das Skript.

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

box_size = 4.0
R = 6400.0e+3

print mpl.__version__
fig = plt.figure()
#if version > 1.0.0
#ax = plt.add_subplot(111, projection='3d')

start = 0
stop = 1
step = 1

Nnode = 4
for step in range(start, stop, step):
	print step
	tag = []
	x = []
	y = []
	z = []
	for n in range(Nnode):
		data = np.loadtxt("./result/%05d_%05d_%05d.dat" % (step, Nnode, n), skiprows=2, delimiter="\t");
		tag.extend(data[:,1])
		x.extend(data[:,3])
		y.extend(data[:,4])
		z.extend(data[:,5])

	x_tag = [[], [], [], []]
	y_tag = [[], [], [], []]
	z_tag = [[], [], [], []]
	size_tag = [[], [], [], []]

	for i in range(len(x)):
		x[i] = x[i]/R
		y[i] = y[i]/R
		z[i] = z[i]/R
		x_tag[int(tag[i])].append(x[i])
		y_tag[int(tag[i])].append(y[i])
		z_tag[int(tag[i])].append(z[i])
		size_tag[int(tag[i])].append(1.0)


	clr = ["orange", "gray", "red", "black"]

	ax = Axes3D(fig)
	for tag in range(4):
		ax.scatter(x_tag[tag], y_tag[tag], z_tag[tag], s=size_tag[tag], c=clr[tag], edgecolor=clr[tag], alpha=0.1)

	ax.set_aspect('equal')
	ax.set_xlim3d(-box_size, box_size)
	ax.set_ylim3d(-box_size, box_size)
	ax.set_zlim3d(-box_size, box_size)
	ax.view_init(9.0, 45.0)
	#plt.show()
	plt.savefig("./img/%05d.png " % step)

Kommentar

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

Zuerst importieren.

box_size = 4.0
R = 6400.0e+3

Deklaration von Konstanten.

print mpl.__version__
fig = plt.figure()
#if version > 1.0.0
#ax = plt.add_subplot(111, projection='3d')

Ich gebe die Version von matplotlib aus. Da matplotlib je nach Version eine andere 3D-Plotmethode hat ...

start = 0
stop = 1
step = 1

Erstellen Sie ein Diagramm, indem Sie Schritt für Schritt von Anfang bis Ende erhöhen.

	tag = []
	x = []
	y = []
	z = []

Array-Initialisierung.

	for n in range(Nnode):
		data = np.loadtxt("./result/%05d_%05d_%05d.dat" % (step, Nnode, n), skiprows=2, delimiter="\t");
		tag.extend(data[:,1])
		x.extend(data[:,3])
		y.extend(data[:,4])
		z.extend(data[:,5])

Da die Berechnungsergebnisse in Nnode-Dateien verteilt sind, laden Sie sie einzeln mit loadtxt in die Daten. Verwenden Sie die Extend-Methode, um in das zuvor definierte Array einzutauchen. In diesem Fall ist die erste Spalte das Tag, die dritte Spalte die x-Koordinate, die vierte Spalte die y-Koordinate und die fünfte Spalte die z-Koordinate.

	x_tag = [[], [], [], []]
	y_tag = [[], [], [], []]
	z_tag = [[], [], [], []]
	size_tag = [[], [], [], []]

Erstellen Sie ein zweidimensionales Array zum Plotten, indem Sie die Farbe für jedes Tag ändern.

	for i in range(len(x)):
		x[i] = x[i]/R
		y[i] = y[i]/R
		z[i] = z[i]/R
		x_tag[int(tag[i])].append(x[i])
		y_tag[int(tag[i])].append(y[i])
		z_tag[int(tag[i])].append(z[i])
		size_tag[int(tag[i])].append(1.0)

	clr = ["orange", "gray", "red", "black"]

Nach dem Teilen der Koordinaten durch die standardisierte Konstante werden die Daten in das entsprechende Array von Tags getaucht. Definieren Sie danach die Farbe, die dem Tag entspricht.

	ax = Axes3D(fig)
	for tag in range(4):
		ax.scatter(x_tag[tag], y_tag[tag], z_tag[tag], s=size_tag[tag], c=clr[tag], edgecolor=clr[tag], alpha=0.1)

Erstellen Sie eine Axes3D-Klasse und gießen Sie Daten in die Streuung. Dies muss für jedes Tag durchgeführt werden. Dieses Mal ist size_tag festgelegt. Setzen Sie die Kantenfarbe auf clr [Tag]. Dies ermöglicht das Zeichnen mit randlosen Partikeln. Das Permeabilitäts-Alpha beträgt durchweg 0,1.

	ax.set_aspect('equal')
	ax.set_xlim3d(-box_size, box_size)
	ax.set_ylim3d(-box_size, box_size)
	ax.set_zlim3d(-box_size, box_size)
	ax.view_init(9.0, 45.0)

Diesmal sind alle Seitenverhältnisse gleich. Stellen Sie außerdem den Bereich jeder Achse ein. Stellen Sie den Kamerawinkel mit view_init ein.

	#plt.show()
	plt.savefig("./img/%05d.png " % step)

Ausgabe. Sie können () normal anzeigen, aber dieses Mal werde ich es mit savefig png machen und später ein Anime-GIF machen.

Richtig? Ist es nicht einfach

Recommended Posts

Ich wollte die 3D-Partikelsimulation mit der Python-Visualisierungsbibliothek Matplotlib visualisieren.
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Ich wollte die Python-Bibliothek von MATLAB verwenden
Ich wollte ABC160 mit Python lösen
Ich wollte ABC172 mit Python lösen
[Python] Ich habe versucht, das Preisgeld von "ONE PIECE" über 100 Millionen Zeichen mit matplotlib zu visualisieren.
Ich habe versucht, das Modell mit der Low-Code-Bibliothek für maschinelles Lernen "PyCaret" zu visualisieren.
Ich wollte den NOMURA Contest 2020 mit Python lösen
Ich wollte mit der Bezier-Kurve spielen
Ich wollte Python 3.4.3 mit Homebrew + pyenv installieren
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3
Ich möchte mit Python-Datenklasse nach hinten erben
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
[Python] Verwendung von Matplotlib, einer Bibliothek zum Zeichnen von Diagrammen
Was ich getan habe, um die Python2 EOL mit Zuversicht zu begrüßen
[Python] Ich möchte die Option -h mit argparse verwenden
[Python] Ich habe versucht, Tweets über Corona mit WordCloud zu visualisieren
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe das Toho-Projekt mit Deep Learning aufgenommen ... ich wollte.
Ich mochte den Tweet mit Python. ..
Ich möchte mit Python debuggen
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich habe versucht zu beheben "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren"
[Einführung in Matplotlib] Achsen 3D-Animation: Ich habe mit 3D-Lisaju-Figuren gespielt ♬
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
[Python] Ich habe versucht, die Texte von Arashi mit WordCloud zu visualisieren und herauszufinden, was ich den Fans in 20 Jahren Ausbildung vermitteln wollte
FBX SDK Welche Fähigkeiten benötige ich, um ein Programm mit Python zu erstellen?
[Python] Legen Sie den Diagrammbereich mit matplotlib fest
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Fügen Sie auf beiden Seiten ein Konfidenzintervall von 95% hinzu, um mit Python / Matplotlib zu rechnen
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
Es ist neuer, aber ich wollte die BMI-Berechnung mit Python ausprobieren.
Ich wollte ABC159 mit Python lösen
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen
Ich habe die Bibliothek mit Visual Studio Code installiert, konnte sie jedoch nicht importieren
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, den Text des Romans "Wetterkind" mit Word Cloud zu visualisieren
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Richten Sie die Farbleiste mit matplotlib an der Figur aus
Ich wollte unbedingt mit Selen kopieren
Der Weg zum Kompilieren zu Python 3 mit Thrift
Ich habe versucht, mit der Bibliothek GiNZA zur Verarbeitung natürlicher Sprache eindeutige Ausdrücke zu extrahieren
Ich habe versucht, die Python-Bibliothek "pykakasi" zu verwenden, die Kanji in Romaji konvertieren kann.
[Wissenschaftlich-technische Berechnung mit Python] Zeichnen, visualisieren, matplotlib 2D-Daten mit Fehlerleiste
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden