Maison  >  Article  >  développement back-end  >  Introduction à la méthode de dessin de graphiques 3D à l'aide de Matplotlib en python

Introduction à la méthode de dessin de graphiques 3D à l'aide de Matplotlib en python

巴扎黑
巴扎黑original
2017-09-05 11:21:413958parcourir

Cet article présente principalement l'exemple de code de Matplotlib en python pour dessiner des images 3D. Il a une certaine valeur de référence. Ceux qui sont intéressés peuvent en apprendre davantage

Matplotlib peut également dessiner des images 3D, ce qui est différent de. images en deux dimensions. Ce qui est intéressant, c'est que le dessin d'images en trois dimensions est principalement réalisé grâce au module mplot3d. Cependant, l'utilisation de Matplotlib pour dessiner des images en trois dimensions est en fait affichée sur un canevas en deux dimensions, donc généralement lorsque vous dessinez des images en trois dimensions, vous devez également charger le module pyplot. Le module
mplot3d contient principalement 4 grandes catégories, à savoir :

  • mpl_toolkits.mplot3d.axes3d()

  • mpl_toolkits.mplot3d .axis3d ()

  • mpl_toolkits.mplot3d.art3d()

  • mpl_toolkits.mplot3d.proj3d()

Parmi eux, axes3d() comprend principalement diverses classes et méthodes d'implémentation du dessin. axis3d() comprend principalement des classes et des méthodes liées aux axes de coordonnées. art3d() contient des classes et des méthodes qui convertissent des images 2D et les utilisent pour le dessin 3D. proj3d() contient des classes et méthodes fragmentées, telles que le calcul de la longueur de vecteurs tridimensionnels.

Généralement, ce que nous utilisons le plus est la classe mpl_toolkits.mplot3d.axes3d.Axes3D() dans mpl_toolkits.mplot3d.axes3d(), et il existe différents types de dessin 3D sous la méthode de diagramme Axes3D() . Vous pouvez importer Axes3D() de la manière suivante.

depuis mpl_toolkits.mplot3d.axes3d importez Axes3D ou depuis mpl_toolkits.mplot3d importez Axes3D

nuage de points 3D

Tout d'abord, nous importons Numpy génère aléatoirement un ensemble de données.


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)

Ensuite, commencez à dessiner. La première étape consiste à charger les modules de dessin 2D et 3D.


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

La deuxième étape consiste à utiliser Axes3D() pour créer un objet graphique 3D.


fig = plt.figure()
ax = Axes3D(fig)

Enfin, appelez la méthode de dessin du nuage de points pour le dessiner et l'afficher.


ax.scatter(x, y, z)
plt.show()

Graphique linéaire en trois dimensions

Le graphique linéaire est similaire au nuage de points et doit passer en x, y , z Les valeurs des trois coordonnées. Le code détaillé est le suivant.


# 载入模块
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()

Diagramme à barres en trois dimensions

Après avoir dessiné le graphique linéaire, nous continuons d'essayer de dessiner les trois graphique à barres dimensionnelles. En fait, les étapes de dessin sont également très similaires à celles ci-dessus.


# 载入模块
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()

Tracé de surface tridimensionnel

Le prochain tracé de surface tridimensionnel qui doit être dessiné est un peu plus gênant. Nous devons analyser les données. En fait, cela ressemble beaucoup au dessin d’une carte de contour en deux dimensions, sauf qu’une dimension supplémentaire est ajoutée.


# 载入模块
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 signifie que la palette de couleurs hivernale est utilisée, qui est la couleur dégradée dans l'image ci-dessous.

Dessin de graphiques mixtes

Le graphique mixte consiste à dessiner deux types de graphiques différents dans un seul graphique. Il y a généralement une condition préalable pour dessiner un diagramme mixte, c'est-à-dire que la gamme des deux types de diagrammes différents est à peu près la même, sinon il y aura une grave disharmonie proportionnelle, rendant le diagramme mixte dénué de sens.


# -*- 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()

Dessin de sous-image


# -*- 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()

Nous pouvons prendre un regarde ces codes. Étant donné que les deux sous-images sont dessinées sur une seule toile, une toile doit être créée à l'avance. Ajoutez ensuite un sous-tracé via .add_subplot(). Le numéro de série du sous-tracé est similaire à celui du dessin bidimensionnel. Notez simplement que le paramètre projection='3d' doit être ajouté lors du dessin 3D.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn