Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
Con Matplotlib, grafica datos en 3D, es muy fácil. Que mejor que un ejemplo?
# Creamos la figura
fig = plt.figure()
# Agrrgamos un plano 3D
ax1 = fig.add_subplot(111,projection='3d')
# Mostramos el gráfico
plt.show()
¿Que hace falta? Por supuesto, los datos. Para ello, utilizaremos la libreria numpy y
el metodo plot_wireframe:
# Creamos la figura
fig = plt.figure()
# Agrrgamos un plano 3D
ax1 = fig.add_subplot(111,projection='3d')
# Mostramos el gráfico
plt.show()
# Scatter
# Creamos la figura
fig = plt.figure()
# Creamos el plano 3D
ax1 = fig.add_subplot(111, projection='3d')
# 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]
# Mostramos el gráfico
plt.show()
Con el método bar3d podemos generar barras 3D de manera muy sencilla. Veamos
un ejemplo:
fig = plt.figure()
ax1 = fig.add_subplot(111, projection='3d')
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()
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.
Greg
7,315 1 27 40
añadir un comentario
5
Mejoré la respuesta de @Greg e hice un cilindro 3D sólido con una superficie superior e inferior
y reescribí la ecuación para que puedas traducir en x, y, y z
from mpl_toolkits.mplot3d import Axes3D import mpl_toolkits.mplot3d.art3d as
art3d import matplotlib.pyplot as plt import numpy as np from matplotlib.patches
import Circle def plot_3D_cylinder(radius, height, elevation=0, resolution=100,
color='r', x_center = 0, y_center = 0): fig=plt.figure() ax = Axes3D(fig, azim=30,
elev=30) x = np.linspace(x_center-radius, x_center+radius, resolution) z =
np.linspace(elevation, elevation+height, resolution) X, Z = np.meshgrid(x, z) Y =
np.sqrt(radius**2 - (X - x_center)**2) + y_center # Pythagorean theorem
ax.plot_surface(X, Y, Z, linewidth=0, color=color) ax.plot_surface(X, (2*y_center-
Y), Z, linewidth=0, color=color) floor = Circle((x_center, y_center), radius,
color=color) ax.add_patch(floor) art3d.pathpatch_2d_to_3d(floor, z=elevation,
zdir="z") ceiling = Circle((x_center, y_center), radius, color=color)
ax.add_patch(ceiling) art3d.pathpatch_2d_to_3d(ceiling, z=elevation+height,
zdir="z") ax.set_xlabel('x-axis') ax.set_ylabel('y-axis') ax.set_zlabel('z-axis')
plt.show() # params radius = 3 height = 10 elevation = -5 resolution = 100 color =
'r' x_center = 3 y_center = -2 plot_3D_cylinder(radius, height,
elevation=elevation, resolution=resolution, color=color, x_center=x_center,
y_center=y_center)
Crypdick
1,004 1 11 29
añadir un comentario
4
Hoy tengo que hacer lo mismo en mi proyecto sobre agregar un cilindro transparente en el
resultado.Este es el código que finalmente obtengo. Así que lo comparto con ustedes solo para
aprender
import numpy as np def
data_for_cylinder_along_z(center_x,center_y,radius,height_z): z = np.linspace(0,
height_z, 50) theta = np.linspace(0, 2*np.pi, 50) theta_grid,
z_grid=np.meshgrid(theta, z) x_grid = radius*np.cos(theta_grid) + center_x y_grid
= radius*np.sin(theta_grid) + center_y return x_grid,y_grid,z_grid import
matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig =
plt.figure() ax = fig.add_subplot(111, projection='3d') Xc,Yc,Zc =
data_for_cylinder_along_z(0.2,0.2,0.05,0.1) ax.plot_surface(Xc, Yc, Zc, alpha=0.5)
plt.show()
Y obtendrás esta hermosa
figura.