Einführung
In diesem Lab wird gezeigt, wie die Funktion Axes3D.voxels in Matplotlib verwendet wird, um einen 3D-Voxel-Diagramm des NumPy-Logos zu erstellen.
Tipps für die virtuelle Maschine
Nachdem der Start der virtuellen Maschine abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Bibliotheken importieren
Zunächst müssen wir die erforderlichen Bibliotheken importieren, nämlich Matplotlib und NumPy.
import matplotlib.pyplot as plt
import numpy as np
Definiere die explode-Funktion
Als nächstes definieren wir eine Funktion namens explode, die verwendet werden soll, um das Voxelbild des NumPy-Logos aufzuschließen. Diese Funktion nimmt ein NumPy-Array als Eingabe entgegen und gibt ein neues NumPy-Array zurück, das doppelt so groß wie das Eingabe-Array ist.
def explode(data):
size = np.array(data.shape)*2
data_e = np.zeros(size - 1, dtype=data.dtype)
data_e[::2, ::2, ::2] = data
return data_e
Baue das NumPy-Logo
Jetzt können wir beginnen, das NumPy-Logo mit einem 3D-NumPy-Array namens n_voxels zu bauen. Wir setzen bestimmte Elemente im Array auf True, um die Form des Logos darzustellen. Wir definieren auch zwei weitere NumPy-Arrays namens facecolors und edgecolors, die verwendet werden, um die Voxel zu färben.
n_voxels = np.zeros((4, 3, 4), dtype=bool)
n_voxels[0, 0, :] = True
n_voxels[-1, 0, :] = True
n_voxels[1, 0, 2] = True
n_voxels[2, 0, 1] = True
facecolors = np.where(n_voxels, '#FFD65DC0', '#7A88CCC0')
edgecolors = np.where(n_voxels, '#BFAB6E', '#7D84A6')
Vergrößere das Voxelbild
Wir verwenden jetzt die zuvor definierte explode-Funktion, um das Voxelbild aufzuschließen und dabei zwischen jedem Voxel Leerraum zu lassen.
filled = np.ones(n_voxels.shape)
filled_2 = explode(filled)
fcolors_2 = explode(facecolors)
ecolors_2 = explode(edgecolors)
Vereng die Lücken
Wir verengen die Lücken zwischen jedem Voxel, indem wir die Koordinaten jedes Voxels mithilfe der indices-Funktion von NumPy modifizieren.
x, y, z = np.indices(np.array(filled_2.shape) + 1).astype(float) // 2
x[0::2, :, :] += 0.05
y[:, 0::2, :] += 0.05
z[:, :, 0::2] += 0.05
x[1::2, :, :] += 0.95
y[:, 1::2, :] += 0.95
z[:, :, 1::2] += 0.95
Erzeuge das Voxel-Diagramm
Schließlich erstellen wir das 3D-Voxel-Diagramm mithilfe der voxels-Funktion der Axes3D-Klasse in Matplotlib.
ax = plt.figure().add_subplot(projection='3d')
ax.voxels(x, y, z, filled_2, facecolors=fcolors_2, edgecolors=ecolors_2)
ax.set_aspect('equal')
plt.show()
Zusammenfassung
In diesem Lab wurde gezeigt, wie man mithilfe von Matplotlib ein 3D-Voxel-Diagramm des NumPy-Logos erstellt. Wir haben NumPy verwendet, um das Logo zu erstellen, und die Axes3D.voxels-Funktion, um das Diagramm zu erzeugen. Wir haben auch eine Funktion namens explode verwendet, um das Voxelbild des Logos aufzuschließen.