Heim >Backend-Entwicklung >Python-Tutorial >Einführung in die Methode zum Zeichnen von 3D-Diagrammen mit Matplotlib in Python
In diesem Artikel wird hauptsächlich der Beispielcode von Matplotlib in Python zum Zeichnen von 3D-Bildern vorgestellt. Er hat einen gewissen Referenzwert.
Matplotlib kann auch 3D-Bilder zeichnen Interessant ist, dass das Zeichnen dreidimensionaler Bilder hauptsächlich durch das Modul mplot3d erreicht wird. Die Verwendung von Matplotlib zum Zeichnen dreidimensionaler Bilder erfolgt jedoch tatsächlich auf einer zweidimensionalen Leinwand. Daher müssen Sie beim Zeichnen dreidimensionaler Bilder im Allgemeinen auch das Pyplot-Modul laden. Das
mplot3d-Modul enthält hauptsächlich 4 Hauptkategorien, nämlich:
mpl_toolkits.mplot3d.axes3d()
mpl_toolkits.mplot3d .axis3d ()
mpl_toolkits.mplot3d.art3d()
mpl_toolkits.mplot3d.proj3d()
Davon umfasst axis3d() hauptsächlich verschiedene Klassen und Methoden zum Implementieren von Zeichnungen. axis3d() enthält hauptsächlich Klassen und Methoden, die sich auf Koordinatenachsen beziehen. art3d() enthält Klassen und Methoden, die 2D-Bilder konvertieren und für 3D-Zeichnungen verwenden. proj3d() enthält einige fragmentierte Klassen und Methoden, beispielsweise die Berechnung der Länge dreidimensionaler Vektoren.
Im Allgemeinen verwenden wir am häufigsten die Klasse mpl_toolkits.mplot3d.axes3d.Axes3D() in mpl_toolkits.mplot3d.axes3d(), und es gibt verschiedene Arten von 3D-Zeichnungen unter der Diagrammmethode Axes3D() . Sie können Axes3D() auf folgende Weise importieren.
aus mpl_toolkits.mplot3d.axes3d Import Axes3D oder aus mpl_toolkits.mplot3d Import Axes3D
Dreidimensionales Streudiagramm
Zuerst haben wir import Numpy generiert zufällig einen Datensatz.
import numpy as np # x, y, z 均为 0 到 1 之间的 100 个随机数 x = np.random.normal(0, 1, 100) y = np.random.normal(0, 1, 100) z = np.random.normal(0, 1, 100)
Als nächstes beginnen Sie mit dem Zeichnen. Der erste Schritt besteht darin, die 2D- und 3D-Zeichnungsmodule zu laden.
from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt
Der zweite Schritt besteht darin, Axes3D() zu verwenden, um ein 3D-Grafikobjekt zu erstellen.
fig = plt.figure() ax = Axes3D(fig)
Rufen Sie abschließend die Methode zum Zeichnen des Streudiagramms auf, um es zu zeichnen und anzuzeigen.
ax.scatter(x, y, z) plt.show()
Dreidimensionales Liniendiagramm
Das Liniendiagramm ähnelt einem Streudiagramm und muss in x, y übergeben werden , z Die Werte der drei Koordinaten. Der detaillierte Code lautet wie folgt.
# 载入模块 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np # 生成数据 x = np.linspace(-6 * np.pi, 6 * np.pi, 1000) y = np.sin(x) z = np.cos(x) # 创建 3D 图形对象 fig = plt.figure() ax = Axes3D(fig) # 绘制线型图 ax.plot(x, y, z) # 显示图 plt.show()
Dreidimensionales Balkendiagramm
Nachdem wir das Liniendiagramm gezeichnet haben, versuchen wir weiterhin, das Dreidimensionale zu zeichnen. Tatsächlich sind die Zeichenschritte den oben genannten sehr ähnlich.
# 载入模块 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np # 创建 3D 图形对象 fig = plt.figure() ax = Axes3D(fig) # 生成数据并绘图 x = [0, 1, 2, 3, 4, 5, 6] for i in x: y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] z = abs(np.random.normal(1, 10, 10)) ax.bar(y, z, i, zdir='y', color=['r', 'g', 'b', 'y']) plt.show()
Dreidimensionales Oberflächendiagramm
Das nächste dreidimensionale Oberflächendiagramm, das gezeichnet werden muss, ist klein Es ist schwieriger, die Daten zu analysieren. Tatsächlich ist es dem Zeichnen einer zweidimensionalen Konturkarte sehr ähnlich, außer dass eine weitere Dimension hinzugefügt wird.
# 载入模块 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建 3D 图形对象 fig = plt.figure() ax = Axes3D(fig) # 生成数据 X = np.arange(-2, 2, 0.1) Y = np.arange(-2, 2, 0.1) X, Y = np.meshgrid(X, Y) Z = np.sqrt(X ** 2 + Y ** 2) # 绘制曲面图,并使用 cmap 着色 ax.plot_surface(X, Y, Z, cmap=plt.cm.winter) plt.show()
cmap=plt.cm.winter bedeutet, dass das Winterfarbschema verwendet wird, also die Verlaufsfarbe im Bild unten.
Zeichnen gemischter Diagramme
Bei gemischten Diagrammen werden zwei verschiedene Arten von Diagrammen in einem Diagramm gezeichnet. Für das Zeichnen eines gemischten Diagramms ist im Allgemeinen eine Voraussetzung erforderlich, dass der Bereich der beiden verschiedenen Diagrammtypen ungefähr gleich ist. Andernfalls kommt es zu einer schwerwiegenden proportionalen Disharmonie, die das gemischte Diagramm bedeutungslos macht.
# -*- coding: utf-8 -* # 载入模块 from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt # 创建 3D 图形对象 fig = plt.figure() ax = Axes3D(fig) # 生成数据并绘制图 1 x1 = np.linspace(-3 * np.pi, 3 * np.pi, 500) y1 = np.sin(x1) ax.plot(x1, y1, zs=0, c='red') # 生成数据并绘制图 2 x2 = np.random.normal(0, 1, 100) y2 = np.random.normal(0, 1, 100) z2 = np.random.normal(0, 1, 100) ax.scatter(x2, y2, z2) # 显示图 plt.show()
Unterbildzeichnung
# -*- coding: utf-8 -* # 载入模块 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np # 创建 1 张画布 fig = plt.figure() #=============== # 向画布添加子图 1 ax1 = fig.add_subplot(1, 2, 1, projection='3d') # 生成子图 1 数据 x = np.linspace(-6 * np.pi, 6 * np.pi, 1000) y = np.sin(x) z = np.cos(x) # 绘制第 1 张图 ax1.plot(x, y, z) #=============== # 向画布添加子图 2 ax2 = fig.add_subplot(1, 2, 2, projection='3d') # 生成子图 2 数据 X = np.arange(-2, 2, 0.1) Y = np.arange(-2, 2, 0.1) X, Y = np.meshgrid(X, Y) Z = np.sqrt(X ** 2 + Y ** 2) # 绘制第 2 张图 ax2.plot_surface(X, Y, Z, cmap=plt.cm.winter) # 显示图 plt.show()
Wir können eine nehmen Schauen Sie sich diese Codes an. Da die beiden Teilbilder auf einer Leinwand gezeichnet werden, muss vorab eine Leinwand erstellt werden. Fügen Sie dann über .add_subplot() einen Unterplot hinzu. Die Seriennummer des Unterplots ähnelt der einer zweidimensionalen Zeichnung. Beachten Sie jedoch, dass beim 3D-Zeichnen der Parameter project='3d' hinzugefügt werden muss.
Das obige ist der detaillierte Inhalt vonEinführung in die Methode zum Zeichnen von 3D-Diagrammen mit Matplotlib in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!