[PYTHON] Graphique 3D avec matplotlib

Un bref résumé pour le traçage en 3D avec matplotlib. Tracons la fonction de densité de probabilité de la distribution normale bivariée en 3D.

Voir le [tutoriel] officiel (https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html) pour plus de détails.

Réglage

Importez ce dont vous avez besoin pour le moment. Définissez également le nombre de dimensions et de paramètres de la distribution normale.

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 ajouté

Il ne semble pas y avoir de changement majeur dans la dernière version (version stable ver 2.2.2). Voir ici pour plus de détails. The mplot3d Toolkit

Différentes parcelles

Surface Plot Essayez Surface Plot (tracé de surface en japonais?). Notez que les données passées à la fonction plot_surface sont un tableau à deux dimensions.

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 Le tracé de contour peut être réalisé de la même manière que le tracé de surface.

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 Contrairement à auparavant, les données transmises au nuage de points sont un tableau unidimensionnel.

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

Le nuage de points n'est pas fait pour lorsque vous voulez voir la forme d'une telle fonction, il ne peut donc pas être aidé qu'il soit difficile à voir.

À propos d'Axes3D

En regardant d'autres articles, il existe des exemples de création d'objets hache pour la 3D comme suit, mais

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

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

Dans les versions récentes, il semble recommandé de l'utiliser comme dans le tutoriel.

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'>

Au fait, Axes3D n'est pas utilisé explicitement, mais si vous ne l'importez pas, vous obtiendrez KeyError: '3d'.

De plus, il semble que vous puissiez créer un objet hache de la même classe comme suit.

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

Autre

Il semble y avoir plotly qui trace bien en 3D avec python, alors j'aimerais le savoir bientôt.

Recommended Posts

Graphique 3D avec matplotlib
Graphique 2 axes avec Matplotlib
Graphique 2D dans matplotlib
Nuage de points 3D avec PyQtGraph
Bar plot empilable avec matplotlib
Créer un diagramme de dispersion 3D avec SciPy + matplotlib (Python)
Créer une animation de tracé avec Python + Matplotlib
Couleur en continu avec le diagramme de dispersion matplotlib
Effectuer un tracé de probabilité normale logarithmique avec Python, matplotlib
Animation avec matplotlib
Japonais avec matplotlib
Animation avec matplotlib
histogramme avec matplotlib
Faire une animation avec matplotlib
Dessinez une surface plane avec un graphique 3D matplotlib
[Python] axe limite du graphe 3D avec Matplotlib
Tracer la courbe ROC pour la classification binaire avec Matplotlib
Carte thermique par Python + matplotlib
Apprenez avec Chemo Informatics Matplotlib
Différentes barres de couleurs avec Matplotlib
3D ou D avec Py
(Mémorandum) Créer un diagramme de dispersion 3D avec matplodlib
Diagramme de séries chronologiques / Matplotlib
Ajustez les axes avec matplotlib
[Calcul scientifique / technique par Python] Tracer, visualiser, matplotlib des données 2D avec barre d'erreur
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
[Python] Comment dessiner un diagramme de dispersion avec Matplotlib
Jouons avec la 4e dimension 4e
Diagramme de bougie avec tracé
Graphique des données Excel avec matplotlib (1)
Essayez d'utiliser matplotlib avec PyCharm
Créer un gif 3D avec python3
Méthode de dessin graphique avec matplotlib
Graphique des données Excel avec matplotlib (2)
Sélectionnez les couleurs en dégradé avec matplotlib
Animer plusieurs graphiques avec matplotlib
Tracé interactif du graphique 3D
Reformatez l'axe des temps du graphique de la série chronologique des pandas avec matplotlib
La vie de recherche et développement avec le notebook iPython
Manuel de graphisme Python avec Matplotlib.
Japaneseize Matplotlib avec Alpine en utilisant Docker
Résoudre ABC166 A ~ D avec Python
Dessinez un graphique lâche avec matplotlib
Traçage de données polyvalent avec pandas + matplotlib
[Introduction à Matplotlib] Axes Animation 3D: J'ai joué avec des figurines 3D Lisaju ♬
Heatmap avec dendrogramme en Python + matplotlib
Dessin 3D avec SceneKit dans Pythonista
Réglage facile de la police japonaise avec matplotlib
Dessinez facilement des graphiques avec matplotlib
Cas utilisant un tracé de pandas, cas utilisant un tracé matplotlib (pur)
Dessinez Riapnov Fractal avec Python, matplotlib
Quand matplotlib ne fonctionne pas avec python2.7
Animation facile avec matplotlib (mp4, gif)
Écrire un histogramme empilé avec matplotlib
Comment afficher les marques de légende en un avec le tracé Python 2D
Implémentez "Data Visualization Design # 2" avec matplotlib