Trazado de superficies 3D en Python usando Matplotlib

Un gráfico de superficie es una representación de un conjunto de datos tridimensional. Describe una relación funcional entre dos variables independientes X y Z y una variable dependiente designada Y, en lugar de mostrar los puntos de datos individuales. Es una gráfica complementaria de la gráfica de contorno. Es similar al diagrama de estructura alámbrica, pero cada cara de la estructura alámbrica es un polígono relleno. Esto ayuda a crear la topología de la superficie que se está visualizando.
 

Creación de un gráfico de superficie 3D

El axes3d presente en el kit de herramientas mpl_toolkits.mplot3d de Matplotlib proporciona las funciones necesarias que se utilizan para crear gráficos de superficie 3D. Los gráficos de superficie se crean utilizando la función ax.plot_surface().
Sintaxis: 

ax.plot_surface(X, Y, Z)

donde X e Y son una array 2D de puntos de x e y, mientras que Z es una array 2D de alturas. Algunos atributos más de la función ax.plot_surface() se enumeran a continuación:
 

Atributo Descripción
X, Y, Z Arrays 2D de valores de datos
paso a paso array de zancada de columna (tamaño de paso)
paso rápido array de zancadas de fila (tamaño de paso)
cuenta número de columnas a utilizar, el valor predeterminado es 50
contar número de fila a utilizar, por defecto es 50
color color de la superficie
cmap mapa de colores para la superficie
norma instancia para normalizar los valores del mapa de color
vmín valor mínimo del mapa
vmax valor máximo del mapa
colores de cara color de la cara de la superficie individual
sombra matiza el color de la cara

Ejemplo: Vamos a crear una superficie 3D usando la función anterior 

Python3

# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
 
 
# Creating dataset
x = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )
 
# Creating figure
fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')
 
# Creating plot
ax.plot_surface(x, y, z)
 
# show plot
plt.show()

Producción: 

Gráfico de superficie de gradiente

El gráfico de superficie de gradiente es una combinación de un gráfico de superficie 3D con un gráfico de contorno 2D. En este gráfico, la superficie 3D se colorea como un gráfico de contorno 2D. Las partes que están en la parte alta de la superficie contienen un color diferente al de las partes que están en la parte baja de la superficie.
Sintaxis:

surf = ax.plot_surface(X, Y, Z, cmap=, linewidth=0, antialiased=False)

El atributo cmap= indica el color de la superficie. También se puede agregar una barra de color llamando a fig.colorbar. El siguiente código crea una gráfica de superficie degradada:
Ejemplo:

Python3

# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
 
# Creating dataset
x = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )
 
# Creating figure
fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')
 
# Creating color map
my_cmap = plt.get_cmap('hot')
 
# Creating plot
surf = ax.plot_surface(x, y, z,
                       cmap = my_cmap,
                       edgecolor ='none')
 
fig.colorbar(surf, ax = ax,
             shrink = 0.5, aspect = 5)
 
ax.set_title('Surface plot')
 
# show plot
plt.show()

Producción: 

Parcela de superficie 3D con proyecciones de curvas de nivel 2D

Los gráficos de superficie 3D trazados con Matplotlib se pueden proyectar en superficies 2D. El siguiente código crea gráficos 3D y visualiza su proyección en un gráfico de contorno 2D:
Ejemplo: 

Python3

# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
 
# Creating dataset
x = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )
 
# Creating figure
fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')
 
# Creating color map
my_cmap = plt.get_cmap('hot')
 
# Creating plot
surf = ax.plot_surface(x, y, z,
                       rstride = 8,
                       cstride = 8,
                       alpha = 0.8,
                       cmap = my_cmap)
cset = ax.contourf(x, y, z,
                   zdir ='z',
                   offset = np.min(z),
                   cmap = my_cmap)
cset = ax.contourf(x, y, z,
                   zdir ='x',
                   offset =-5,
                   cmap = my_cmap)
cset = ax.contourf(x, y, z,
                   zdir ='y',
                   offset = 5,
                   cmap = my_cmap)
fig.colorbar(surf, ax = ax,
             shrink = 0.5,
             aspect = 5)
 
# Adding labels
ax.set_xlabel('X-axis')
ax.set_xlim(-5, 5)
ax.set_ylabel('Y-axis')
ax.set_ylim(-5, 5)
ax.set_zlabel('Z-axis')
ax.set_zlim(np.min(z), np.max(z))
ax.set_title('3D surface having 2D contour plot projections')
 
# show plot
plt.show()

Producción: 

Publicación traducida automáticamente

Artículo escrito por jeeteshgavande30 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *