Gráficos en tercera dimensión (3D) con Python y Matplotlib - Ejemplos Prácticoss
introducción
Hola amigos de Internet. Les doy la bienvenida a Mi Diario Python, el mejor lugar para Aprender Python.
En este articulo, veremos los métodos de matplotlib que nos permiten graficar y visualizar datos en tercera dimensión.
¿Como es un gráfico 3D? Es algo así:
Por supuesto, es necesario disponer de la libreria matplotlib, la cual podemos instalar desde nuestra consola:
pip install matplotlib
Y también utilizaremos numpy:
pip install numpy
Se recomienda tener un conocimiento previo del manejo de esta libreria.
Te recomiendo ver nuestro articulo sobre matplotlib:
Visualización de Datos con Python y Matplotlib
Gráficos 3D con Matplotlib
Muy bien, sabemos matplotlib es la mejor herramienta para la visualización de datos.
Con la visualización de datos en tercera dimensión, podremos ver de manera más detallada y de manera más interactiva los datos. Por supuesto, no solo nos interesa el aspecto, si no la utilidad. En algún momento tendremos que graficar datos en 3D.
Con Matplotlib, grafica datos en 3D, es muy fácil. Que mejor que un ejemplo?
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import style
# Creamos la figura
fig = plt.figure()
# Agrrgamos un plano 3D
ax1 = fig.add_subplot(111,projection='3d')
# Mostramos el gráfico
plt.show()
Y de esta manera, tenemos un plano tridimensional.
¿Que hace falta? Por supuesto, los datos. Para ello, utilizaremos la libreria numpy y el metodo plot_wireframe:
# Modulos con los que trabajaremos
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
# Creamos la figura
fig = plt.figure()
# Agrrgamos un plano 3D
ax1 = fig.add_subplot(111,projection='3d')
# Datos en array bi-dimensional
x = np.array([[1,2,3,4,5,6,7,8,9,10]])
y = np.array([[5,6,7,8,2,5,6,3,7,2]])
z = np.array([[1,2,6,3,2,7,3,3,7,2]])
# plot_wireframe nos permite agregar los datos x, y, z. Por ello 3D
# Es necesario que los datos esten contenidos en un array bi-dimensional
ax1.plot_wireframe(x, y, z)
# Mostramos el gráfico
plt.show()
Y aquí tenemos nuestro resultado. Muy bonito ¿No?
Scatter en Tercera Dimensión
Podemos graficar scatter utilizando la misma tecnica anterior. En este caso, no sera necesario utilizar el método plot_wireframe. Veamos un ejemplo:
# Scatter # importamos las librerias necesarias from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt # Creamos la figura fig = plt.figure() # Creamos el plano 3D ax1 = fig.add_subplot(111, projection='3d') # Definimos los datos de prueba x = [1,2,3,4,5,6,7,8,9,10] y = [5,6,7,8,2,5,6,3,7,2] z = [1,2,6,3,2,7,3,3,7,2] # Datos adicionales x2 = [-1,-2,-3,-4,-5,-6,-7,-8,-9,-10] y2 = [-5,-6,-7,-8,-2,-5,-6,-3,-7,-2] z2 = [1,2,6,3,2,7,3,3,7,2] # Agregamos los puntos en el plano 3D ax1.scatter(x, y, z, c='g', marker='o') ax1.scatter(x2, y2, z2, c ='r', marker='o') # Mostramos el gráfico plt.show()
Y tenemos obtenemos el resultado esperado. Podemos graficar la cantidad de scatter que sean necesarias, solo utilizando el método scatter.
Barras en Tercera Dimensión
Si podemos hacer puntos, por que no barras? Las barras son un elemento muy importante en la graficación de datos. Nos permite ver de manera detallada, los datos que representa.
Con el método bar3d podemos generar barras 3D de manera muy sencilla. Veamos un ejemplo:
# Importamos los modulos necesarios from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax1 = fig.add_subplot(111, projection='3d') # Definimos los datos x3 = [1,2,3,4,5,6,7,8,9,10] y3 = [5,6,7,8,2,5,6,3,7,2] z3 = np.zeros(10) dx = np.ones(10) dy = np.ones(10) dz = [1,2,3,4,5,6,7,8,9,10] # utilizamos el método bar3d para graficar las barras ax1.bar3d(x3, y3, z3, dx, dy, dz) # Mostramos el gráfico plt.show()
Y como podemos observar, el resultado es muy bueno.
Espero que te sirvan estos ejemplo como base para que puedas experimentar y probar tus propios datos.
Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.
-
-
Aqui no se hace tarea de nadie, investiga.
-
El foro es de ayuda si no pretendes hacerlo es mejor que no digas nada.
-
jajajajajjajajajajajajajajajj por perro
-
-
excelente explicación
-
muy bueno
-
Se podría hacer lo mismo con triangulos en lugar de barras ? gracias.
Deja una respuesta
Hola!
Quisiera saber si podrías ayudarme, debo pasar este script hecho en matlab a python, pero nunca he graficado en 3d en python y me encuentro algo perdida:
x=-5:0.1:5;
y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2 - Y.^2;
surf(Z);
shading interp
Gracias de antemano, por crear además ayuda tan detallada para los que nos encontramos en aprendizaje en python!