¿Cómo dibujar un cubo 3D usando Matplotlib en Python?

En este artículo, nos ocuparemos de las gráficas 3D de cubos usando matplotlib y Numpy. Los cubos son una de las formas 3D más básicas. Un cubo es un objeto sólido tridimensional delimitado por 6 caras cuadradas idénticas. El cubo tiene 6 caras, 12 aristas y 8 esquinas. Todas las caras son cuadrados del mismo tamaño. El área total de la superficie de un cubo es la suma del área de los 6 cuadrados idénticos.

Matplotlib viene con una amplia variedad de gráficos. Los gráficos ayudan a comprender tendencias, patrones para hacer correlaciones. Matplotlib se introdujo para el trazado bidimensional. El gráfico 3d se habilita importando el kit de herramientas mplot3d, que viene con su Matplotlib estándar. Después de importar, se pueden crear gráficos 3D pasando la palabra claveprojection=”3d” a cualquiera de las funciones de creación de ejes regulares en Matplotlib.

Módulos necesarios

  • Matplotlib: es una biblioteca de trazado para la programación de Python que sirve como una biblioteca de utilidad de visualización, Matplotlib se basa en arrays NumPy y está diseñado para funcionar con la pila SciPy más amplia.
  • Numpy: es un paquete de procesamiento de arrays de propósito general. Proporciona arrays y arrays multidimensionales de alto rendimiento junto con una gran colección de funciones matemáticas de alto nivel.
  • mpl_toolkits: proporciona algunas herramientas básicas de trazado en 3D (dispersión, surf, línea, malla). Es una colección de clases auxiliares para mostrar ejes 3D en Matplotlib.

Acercarse

Paso 1: importar bibliotecas.

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

Paso 2: En este paso, estamos seleccionando el eje 3D de la dimensión X =5, Y=5, Z=5, y en np.ones() estamos pasando las dimensiones del cubo.

# Create axis
axes = [5, 5, 5]

# Create Data
data = np.ones(axes)

Paso 3: En este paso, seleccionamos la opacidad del color como alfa = 0,9 (varía de 0,0 a 1,0). En el siguiente paso, estamos pasando la dimensión de los ejes (es decir, 5, 5, 5) + número de caras para el cubo (es decir, 0-4) en la función np.empty() después de eso, estamos pasando la combinación de colores y la opacidad para cada cara del cubo.

# control Transparency
alpha = 0.9

# control colour 
colors = np.empty(axes + [4])

colors[0] = [1, 0, 0, alpha] # red
colors[1] = [0, 1, 0, alpha] # green
colors[2] = [0, 0, 1, alpha] # blue
colors[3] = [1, 1, 0, alpha] # yellow
colors[4] = [1, 1, 1, alpha] # grey

Paso 4: En este paso, usamos la función figure() de la biblioteca matplotlib que se usa para crear una nueva figura. Después de eso, usamos el método add_subplot() para agregar un Axes a la figura como tridimensional (es decir, Proyección = ‘3d’) parte de un arreglo de subtrama. Tiene 3 argumentos.

  • El número de filas en la cuadrícula,
  • El número de columnas en la grilla y,
  • La posición en la que se debe colocar la nueva subparcela.

Cabe señalar que fig.add_subplot(1, 1, 1) es equivalente a fig.add_subplot(111).

# Plot figure
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

Paso 5: Y en este último paso, Voxels se usa para personalizar el tamaño, la posición y el color de la cuadrícula. La sintaxis adecuada se proporciona arriba.

# Voxels is used to customizations of the 
# sizes, positions and colors.
ax.voxels(data, facecolors=colors, edgecolors='grey')

Ejemplo 1: Cubo simple de un color.

Aquí cambiando colors[ : ] , significa que estamos seleccionando todos los elementos de la array como un color (es decir, rojo) y para eliminar la cuadrícula eliminamos el parámetro ‘edgecolor’ del método de vóxeles para tener simplemente un cubo de color.

Python3

# Import libraries
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
 
 
# Create axis
axes = [5, 5, 5]
 
# Create Data
data = np.ones(axes, dtype=np.bool)
 
# Control Transparency
alpha = 0.9
 
# Control colour
colors = np.empty(axes + [4], dtype=np.float32)
 
colors[:] = [1, 0, 0, alpha]  # red
 
# Plot figure
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
 
# Voxels is used to customizations of the
# sizes, positions and colors.
ax.voxels(data, facecolors=colors)

Producción:

Ejemplo 2:

Cubo con cuadrícula y color diferente

Python3

# Import libraries
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
 
 
# Create axis
axes = [5, 5, 5]
 
# Create Data
data = np.ones(axes, dtype=np.bool)
 
# Control Transparency
alpha = 0.9
 
# Control colour
colors = np.empty(axes + [4], dtype=np.float32)
 
colors[0] = [1, 0, 0, alpha]  # red
colors[1] = [0, 1, 0, alpha]  # green
colors[2] = [0, 0, 1, alpha]  # blue
colors[3] = [1, 1, 0, alpha]  # yellow
colors[4] = [1, 1, 1, alpha]  # grey
 
# Plot figure
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
 
# Voxels is used to customizations of
# the sizes, positions and colors.
ax.voxels(data, facecolors=colors, edgecolors='grey')

Producción:

Ejemplo 3: Cubo con caras a lo largo de los ejes Y

En este ejemplo, agregaremos una línea más de código view_init() para cambiar la vista del eje como queramos. El view_init() se puede usar para cambiar la vista de ejes mediante programación. Aquí estamos usando elev=100 y azim=0.

Sintaxis: view_init(elev, azim)

Parámetros:  

  • ‘elev’ almacena el ángulo de elevación en el plano z.
  • ‘azim’ almacena el ángulo de acimut en el plano x,y.

Python3

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
 
axes = [5, 5, 5]
data = np.ones(axes, dtype=np.bool)
 
colors = np.empty(axes + [4], dtype=np.float32)
 
# Control Transparency
alpha = .7
 
# Control colors
colors[0] = [1, 0, 0, alpha]
colors[1] = [0, 1, 0, alpha]
colors[2] = [0, 0, 1, alpha]
colors[3] = [1, 1, 0, alpha]
colors[4] = [0, 1, 1, alpha]
 
# set all internal colors to
# black with alpha=1
colors[1:-1, 1:-1, 1:-1, 0:3] = 0
colors[1:-1, 1:-1, 1:-1, 3] = 1
 
# Plot figure
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
 
# Control number of slice
data[-1] = True
data[-2] = False
data[-3] = False
data[-4] = False
data[-5] = True
 
# Voxels is used to customizations of
# the sizes, positions and colors.
ax.voxels(data, facecolors=colors, edgecolors='pink')
 
# it can be used to change the axes view
ax.view_init(100, 0)

Producción:

Ejemplo 4: cubo con caras a lo largo de los ejes X

El view_init() se puede usar para cambiar la vista de ejes mediante programación. Aquí estamos usando elev=100 y azim=90.

Python3

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
 
axes = [5, 5, 5]
data = np.ones(axes, dtype=np.bool)
 
colors = np.empty(axes + [4], dtype=np.float32)
 
# Control Transparency
alpha = .7
 
# Control colors
colors[0] = [1, 0, 0, alpha]
colors[1] = [0, 1, 0, alpha]
colors[2] = [0, 0, 1, alpha]
colors[3] = [1, 1, 0, alpha]
colors[4] = [0, 1, 1, alpha]
 
# set all internal colors to
# black with alpha=1
colors[1:-1, 1:-1, 1:-1, 0:3] = 0
colors[1:-1, 1:-1, 1:-1, 3] = 1
 
# Plot figure
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
 
# Control number of slice
data[-1] = 1
data[-2] = False
data[-3] = False
data[-4] = False
data[-5] = True
 
# Voxels is used to customizations
# of the sizes, positions and colors.
ax.voxels(data, facecolors=colors, edgecolors='pink')
 
# it can be used to change the axes view
ax.view_init(100, 90)

Producción:

Publicación traducida automáticamente

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