Primäre 3D-Ansichtsebenen

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 Tutorial lernen wir, wie man mithilfe von Matplotlib einen "entfalteten" 3D-Diagramm erstellt, das jede der primären 3D-Ansichtsebenen zeigt. Wir werden auch die Höhen-, Azimut- und Rollwinkel, die für jede Ansicht erforderlich sind, bezeichnen. Dieses Bild kann ausgedruckt und zu einer Schachtel gefaltet werden, wobei jede Ebene eine Seite der Schachtel bildet.

Tipps für virtuelle Maschinen

Nachdem der virtuelle Maschinenstart 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 von 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.

Importieren der erforderlichen Bibliotheken

Wir beginnen mit dem Importieren der erforderlichen Bibliotheken für dieses Tutorial, die Matplotlib einschließlich umfasst.

import matplotlib.pyplot as plt

Definieren einer Funktion zum Anmerkungen der Achsen

Wir definieren eine Funktion annotate_axes, die wir später verwenden werden, um jede der primären 3D-Ansichtsebenen mit ihren jeweiligen Winkeln zu bezeichnen.

def annotate_axes(ax, text, fontsize=18):
    ax.text(x=0.5, y=0.5, z=0.5, s=text,
            va="center", ha="center", fontsize=fontsize, color="black")

Definieren der primären 3D-Ansichtsebenen und ihrer Winkel

Wir definieren die primären 3D-Ansichtsebenen und ihre entsprechenden Höhen-, Azimut- und Rollwinkel.

views = [('XY',   (90, -90, 0)),
         ('XZ',    (0, -90, 0)),
         ('YZ',    (0,   0, 0)),
         ('-XY', (-90,  90, 0)),
         ('-XZ',   (0,  90, 0)),
         ('-YZ',   (0, 180, 0))]

Definieren des Layouts des 3D-Diagramms

Wir definieren das Layout des 3D-Diagramms mithilfe einer Liste von Listen. Das '.' in der Liste stellt ein leeres Subplot dar.

layout = [['XY',  '.',   'L',   '.'],
          ['XZ', 'YZ', '-XZ', '-YZ'],
          ['.',   '.', '-XY',   '.']]

Erstellen des 3D-Diagramms

Wir verwenden subplot_mosaic, um das 3D-Diagramm basierend auf dem im Schritt 4 definierten Layout zu erstellen.

fig, axd = plt.subplot_mosaic(layout, subplot_kw={'projection': '3d'},
                              figsize=(12, 8.5))

Festlegen der Eigenschaften jeder primären 3D-Ansichtsebene

Wir legen die Eigenschaften jeder primären 3D-Ansichtsebene fest, einschließlich der Beschriftungen der x-, y- und z-Achsen, des Projektionstyps und der Blickwinkel.

for plane, angles in views:
    axd[plane].set_xlabel('x')
    axd[plane].set_ylabel('y')
    axd[plane].set_zlabel('z')
    axd[plane].set_proj_type('ortho')
    axd[plane].view_init(elev=angles[0], azim=angles[1], roll=angles[2])
    axd[plane].set_box_aspect(None, zoom=1.25)

Bezeichnung jeder primären 3D-Ansichtsebene

Wir verwenden die in Schritt 2 definierte Funktion annotate_axes, um jede primäre 3D-Ansichtsebene mit ihren jeweiligen Winkeln zu bezeichnen.

for plane, angles in views:
    label = f'{plane}\n{angles}'
    annotate_axes(axd[plane], label, fontsize=14)

Anpassen der Strichmarkenbeschriftungen und Achsenbeschriftungen für jede primäre 3D-Ansichtsebene

Wir passen die Strichmarkenbeschriftungen und Achsenbeschriftungen für jede primäre 3D-Ansichtsebene an, um unnötige Beschriftungen zu entfernen.

for plane in ('XY', '-XY'):
    axd[plane].set_zticklabels([])
    axd[plane].set_zlabel('')
for plane in ('XZ', '-XZ'):
    axd[plane].set_yticklabels([])
    axd[plane].set_ylabel('')
for plane in ('YZ', '-YZ'):
    axd[plane].set_xticklabels([])
    axd[plane].set_xlabel('')

Fügen einer Bezeichnung zum Mittelpunktssubplot hinzu

Wir fügen einer Bezeichnung zum Mittelpunktssubplot hinzu, um anzuzeigen, dass dies ein Diagramm von primären 3D-Ansichtsebenen ist.

label ='mplot3d primäre Sichtsebenen\n' + 'ax.view_init(elev, azim, roll)'
annotate_axes(axd['L'], label, fontsize=18)
axd['L'].set_axis_off()

Zeige das 3D-Diagramm an

Wir zeigen das 3D-Diagramm mit plt.show() an.

plt.show()

Zusammenfassung

In diesem Tutorial haben wir gelernt, wie man mit Matplotlib einen "entfalteten" 3D-Diagramm erstellt, das jede der primären 3D-Ansichtsebenen zeigt. Wir haben auch die Höhen-, Azimut- und Rollwinkel, die für jede Ansicht erforderlich sind, bezeichnet und die Strichmarkenbeschriftungen und Achsenbeschriftungen für jede primäre 3D-Ansichtsebene angepasst. Dieses Bild kann ausgedruckt und zu einer Schachtel gefaltet werden, wobei jede Ebene eine Seite der Schachtel bildet.