[PYTHON] 3D-Plot mit Matplotlib

Eine kurze Zusammenfassung zum Plotten in 3D mit matplotlib. Zeichnen wir die Wahrscheinlichkeitsdichtefunktion der bivariaten Normalverteilung in 3D.

Weitere Informationen finden Sie im offiziellen Tutorial.

Aufbau

Importieren Sie, was Sie vorerst brauchen. Stellen Sie auch die Anzahl der Dimensionen und Parameter der Normalverteilung ein.

import matplotlib
print(matplotlib.__version__)
# 1.5.1

import numpy as np
from scipy.stats import multivariate_normal

#for plotting
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

m = 2 #dimension
mean = np.zeros(m)
sigma = np.eye(m)

2018/4/17 hinzugefügt

In der neuesten Version (stabile Version 2.2.2) scheint es keine wesentlichen Änderungen zu geben. Siehe hier für Details. The mplot3d Toolkit

Verschiedene Grundstücke

Surface Plot Versuchen Sie es mit Surface Plot (Surface Plot auf Japanisch?). Beachten Sie, dass die an die Funktion plot_surface übergebenen Daten ein zweidimensionales Array sind.

N = 1000
x1 = np.linspace(-5, 5, N)
x2 = np.linspace(-5, 5, N)

X1, X2 = np.meshgrid(x1, x2)
X = np.c_[np.ravel(X1), np.ravel(X2)]

Y_plot = multivariate_normal.pdf(x=X, mean=mean, cov=sigma)
Y_plot = Y_plot.reshape(X1.shape)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X1, X2, Y_plot, cmap='bwr', linewidth=0)
fig.colorbar(surf)
ax.set_title("Surface Plot")
fig.show()

# X1.shape : (1000, 1000)
# X2.shape : (1000, 1000)
# Y_plot.shape : (1000, 1000)

surface.png

Contour Plot Das Konturdiagramm kann auf die gleiche Weise wie das Oberflächendiagramm erstellt werden.

N = 1000
x1 = np.linspace(-5, 5, N)
x2 = np.linspace(-5, 5, N)

X1, X2 = np.meshgrid(x1, x2)
X = np.c_[np.ravel(X1), np.ravel(X2)]
Y_plot = multivariate_normal.pdf(x=X, mean=mean, cov=sigma)
Y_plot = Y_plot.reshape(X1.shape)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.contour(X1, X2, Y_plot)
ax.set_title("Contour Plot")
fig.show()

# X1.shape : (1000, 1000)
# X2.shape : (1000, 1000)
# Y_plot.shape : (1000, 1000)

contor.png

Scatter Plot Im Gegensatz zu zuvor sind die an das Streudiagramm übergebenen Daten ein eindimensionales Array.

N = 100
x1 = np.linspace(-5, 5, N)
x2 = np.linspace(-5, 5, N)

X1, X2 = np.meshgrid(x1, x2)
X_plot = np.c_[np.ravel(X1), np.ravel(X2)]

y = multivariate_normal.pdf(X_plot, mean=mean, cov=sigma)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter3D(np.ravel(X1), np.ravel(X2), y)
ax.set_title("Scatter Plot")
plt.show()

# np.ravel(X1).shape : (10000,)
# np.ravel(X2).shape : (10000,)
# y.shape : (10000,)

scatter.png

Das Streudiagramm ist nicht für den Fall gedacht, dass Sie die Form einer solchen Funktion sehen möchten. Daher kann nicht anders, als dass es schwer zu erkennen ist.

Über Axes3D

In anderen Artikeln gibt es Beispiele für das Erstellen von Axtobjekten für 3D wie folgt:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)
#<class 'mpl_toolkits.mplot3d.axes3d.Axes3D'>

In neueren Versionen wird empfohlen, dies wie im Lernprogramm zu verwenden.

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
#<class 'matplotlib.axes._subplots.Axes3DSubplot'>

Axes3D wird übrigens nicht explizit verwendet, aber wenn Sie es nicht importieren, erhalten Sie "KeyError:" 3d ".

Es scheint auch, dass Sie ein Axe-Objekt derselben Klasse wie folgt erstellen können.

fig = plt.figure()
ax = fig.gca(projection='3d')
#<class 'matplotlib.axes._subplots.Axes3DSubplot'>

Andere

Es scheint plotly zu geben, das mit Python gut in 3D plottet, also würde ich es gerne bald herausfinden.

Recommended Posts

3D-Plot mit Matplotlib
2-Achsen-Plot mit Matplotlib
2D-Plot in Matplotlib
3D-Streudiagramm mit PyQtGraph
Stapelbares Barplot mit Matplotlib
Erstellen Sie ein 3D-Streudiagramm mit SciPy + matplotlib (Python)
Erstellen Sie eine Plotanimation mit Python + Matplotlib
Kontinuierliche Farbe mit Matplotlib-Streudiagramm
Führen Sie mit Python, matplotlib, einen logarithmischen Normalwahrscheinlichkeitsplot durch
Animation mit matplotlib
Japanisch mit Matplotlib
Animation mit matplotlib
Histogramm mit Matplotlib
Erstellen Sie eine Animation mit matplotlib
Zeichnen Sie eine flache Oberfläche mit einem Matplotlib-3D-Diagramm
[Python] Grenzachse des 3D-Graphen mit Matplotlib
Zeichnen Sie die ROC-Kurve für die binäre Klassifizierung mit Matplotlib
Heatmap von Python + matplotlib
Lernen Sie mit Chemo Informatics Matplotlib
Verschiedene Farbleisten mit Matplotlib
3D oder D mit Py
(Memorandum) Erstellen Sie mit matplodlib ein 3D-Streudiagramm
Zeitreihendiagramm / Matplotlib
Stellen Sie die Achsen mit matplotlib ein
[Wissenschaftlich-technische Berechnung mit Python] Zeichnen, visualisieren, matplotlib 2D-Daten mit Fehlerleiste
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
[Python] Wie zeichnet man mit Matplotlib ein Streudiagramm?
Spielen wir mit der 4. Dimension der 4. Dimension
Kerzendiagrammplot mit Plotly
Zeichnen Sie Excel-Daten mit matplotlib (1)
Versuchen Sie es mit matplotlib mit PyCharm
Erstellen Sie ein 3D-GIF mit Python3
Diagrammzeichnungsmethode mit matplotlib
Zeichnen Sie Excel-Daten mit matplotlib (2)
Wählen Sie mit matplotlib abgestufte Farben aus
Animieren Sie mehrere Diagramme mit matplotlib
Interaktives Diagramm eines 3D-Diagramms
Formatieren Sie die Zeitachse des Pandas-Zeitreihendiagramms mit matplotlib neu
Forschungs- und Entwicklungsleben mit iPython Notebook
Python-Grafikhandbuch mit Matplotlib.
Japanisieren Sie Matplotlib mit Alpine mit Docker
Löse ABC166 A ~ D mit Python
Zeichnen Sie mit matplotlib ein loses Diagramm
Vielseitige Datenerfassung mit Pandas + Matplotlib
[Einführung in Matplotlib] Achsen 3D-Animation: Ich habe mit 3D-Lisaju-Figuren gespielt ♬
Heatmap mit Dendrogramm in Python + Matplotlib
3D-Zeichnung mit SceneKit in Pythonista
Einfache japanische Schrifteinstellung mit matplotlib
Zeichnen Sie einfach Diagramme mit matplotlib
Fall mit Pandas-Plot, Fall mit (reinem) Matplotlib-Plot
Zeichne Riapnov Fractal mit Python, matplotlib
Wenn matplotlib nicht mit python2.7 funktioniert
Einfache Animation mit matplotlib (mp4, gif)
Schreiben Sie ein gestapeltes Histogramm mit matplotlib
Anzeigen von Legendenmarkierungen in einem mit Python 2D-Plot
Implementieren Sie "Data Visualization Design # 2" mit matplotlib