Trazado tridimensional en Python usando Matplotlib

Matplotlib se introdujo teniendo en cuenta, solo el trazado bidimensional. Pero en el momento en que se produjo el lanzamiento de 1.0, las utilidades 3D se desarrollaron sobre la 2D y, por lo tanto, ¡tenemos una implementación de datos 3D disponible hoy! Los gráficos en 3D se habilitan al importar el kit de herramientas mplot3d. En este artículo, nos ocuparemos de los gráficos 3D usando matplotlib.
Ejemplo: 
 

Python3

import numpy as np
import matplotlib.pyplot as plt
 
 
fig = plt.figure()
ax = plt.axes(projection ='3d')

Producción:
 

python-matplotlib-3d-1

Con la sintaxis anterior, los ejes tridimensionales están habilitados y los datos se pueden trazar en 3 dimensiones. El gráfico de 3 dimensiones brinda un enfoque dinámico y hace que los datos sean más interactivos. Al igual que los gráficos en 2D, podemos usar diferentes formas de representar gráficos en 3D. Podemos hacer un gráfico de dispersión, un gráfico de contorno, un gráfico de superficie, etc. Echemos un vistazo a diferentes gráficos en 3D.
 

Trazado de líneas y puntos en 3D

Los gráficos con líneas y puntos son los gráficos tridimensionales más simples. ax.plot3d y ax.scatter son la función para trazar gráficos de líneas y puntos respectivamente.
Ejemplo 1: gráfico lineal tridimensional 
 

Python3

# importing mplot3d toolkits, numpy and matplotlib
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
 
fig = plt.figure()
 
# syntax for 3-D projection
ax = plt.axes(projection ='3d')
 
# defining all 3 axes
z = np.linspace(0, 1, 100)
x = z * np.sin(25 * z)
y = z * np.cos(25 * z)
 
# plotting
ax.plot3D(x, y, z, 'green')
ax.set_title('3D line plot geeks for geeks')
plt.show()

Producción:
 

python-matplotlib-3d-2

Ejemplo 2: gráfico disperso tridimensional 
 

Python3

# importing mplot3d toolkits
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
 
fig = plt.figure()
 
# syntax for 3-D projection
ax = plt.axes(projection ='3d')
 
# defining axes
z = np.linspace(0, 1, 100)
x = z * np.sin(25 * z)
y = z * np.cos(25 * z)
c = x + y
ax.scatter(x, y, z, c = c)
 
# syntax for plotting
ax.set_title('3d Scatter plot geeks for geeks')
plt.show()

Producción:
 

python-matplotib-3d-3

Trazado de gráficos de superficie y estructuras alámbricas

El gráfico de superficie y el gráfico Wireframes funcionan con datos cuadriculados. Toman el valor de la cuadrícula y lo trazan en una superficie tridimensional.
Ejemplo 1: gráfico de superficie 
 

Python3

# importing libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
 
# defining surface and axes
x = np.outer(np.linspace(-2, 2, 10), np.ones(10))
y = x.copy().T
z = np.cos(x ** 2 + y ** 3)
 
fig = plt.figure()
 
# syntax for 3-D plotting
ax = plt.axes(projection ='3d')
 
# syntax for plotting
ax.plot_surface(x, y, z, cmap ='viridis', edgecolor ='green')
ax.set_title('Surface plot geeks for geeks')
plt.show()

Producción:
 

python-matplotlib-3d-4

Ejemplo 2: Estructuras alámbricas 
 

Python3

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
 
 
# function for z axea
def f(x, y):
    return np.sin(np.sqrt(x ** 2 + y ** 2))
 
# x and y axis
x = np.linspace(-1, 5, 10)
y = np.linspace(-1, 5, 10)
  
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
 
fig = plt.figure()
ax = plt.axes(projection ='3d')
ax.plot_wireframe(X, Y, Z, color ='green')
ax.set_title('wireframe geeks for geeks');

Producción:
 

python-matplotlib-3d-5

Trazado de gráficos de contorno

El gráfico de contorno toma todos los datos de entrada en cuadrículas regulares bidimensionales y los datos Z se evalúan en cada punto. Usamos la función ax.contour3D para trazar un gráfico de contorno.
Ejemplo: 
 

Python3

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
 
 
# function for z axis
def f(x, y):
    return np.sin(np.sqrt(x ** 2 + y ** 3))
 
# x and y axis
x = np.linspace(-1, 5, 10)
y = np.linspace(-1, 5, 10)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
 
fig = plt.figure()
ax = plt.axes(projection ='3d')
 
# ax.contour3D is used plot a contour graph
ax.contour3D(X, Y, Z)

Producción:
 

python-matplotlib-3d-6

Trazado de triangulaciones de superficie

El gráfico anterior a veces es demasiado restringido e inconveniente. Entonces, con este método, usamos un conjunto de sorteos aleatorios. La función ax.plot_trisurf se usa para dibujar este gráfico. No es tan claro pero más flexible.
Ejemplo: 
 

Python3

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
 
 
# angle and radius
theta = 2 * np.pi * np.random.random(100)
r = 6 * np.random.random(100)
 
# all three axes
x = np.ravel(r * np.sin(theta))
y = np.ravel(r * np.cos(theta))
z = f(x, y)
 
ax = plt.axes(projection ='3d')
ax.scatter(x, y, z, c = z, cmap ='viridis', linewidth = 0.25);
 
ax = plt.axes(projection ='3d')
ax.plot_trisurf(x, y, z, cmap ='viridis', edgecolor ='green');

Producción:
 

python-matplotlib-3d-7

Trazado de la tira de Möbius

La tira de Möbius, también llamada cilindro torcido, es una superficie de un solo lado sin límites. Para crear la tira de Möbius piensa en su parametrización, es una tira bidimensional y necesitamos dos dimensiones intrínsecas. Su ángulo varía de 0 a 2 circular alrededor del bucle y el ancho varía de -1 a 1.
Ejemplo: 
 

Python3

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.tri import Triangulation
 
 
theta = np.linspace(0, 2 * np.pi, 10)
w = np.linspace(-1, 5, 8)
w, theta = np.meshgrid(w, theta)
phi = 0.5 * theta
 
# radius in x-y plane
r = 1 + w * np.cos(phi)
 
# all three axes
x = np.ravel(r * np.cos(theta))
y = np.ravel(r * np.sin(theta))
z = np.ravel(w * np.sin(phi))
 
# triangulate in the underlying
# parameterization
tri = Triangulation(np.ravel(w), np.ravel(theta))
  
ax = plt.axes(projection ='3d')
ax.plot_trisurf(x, y, z, triangles = tri.triangles,
                cmap ='viridis', linewidths = 0.2);

Producción:
 

python-matplotlib-3d-8

Publicación traducida automáticamente

Artículo escrito por _tanya_sri_ 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 *