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: