3D Voxel-Diagramm des NumPy-Logos

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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

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.