Saltar al contenido

Gráfico de contorno 3D a partir de datos usando Mayavi / Python

Si encuentras alguna incompatibilidad con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes añadir el código al trabajo final.

Solución:

El truco es interpolar sobre una cuadrícula antes de trazar; yo usaría scipy para esto. Debajo R es un (500,3) array de valores XYZ y V es la “magnitud” en cada punto XYZ.

from scipy.interpolate import griddata
import numpy as np

# Create some test data, 3D gaussian, 200 points
dx, pts = 2, 100j

N = 500
R = np.random.random((N,3))*2*dx - dx
V = np.exp(-( (R**2).sum(axis=1)) )

# Create the grid to interpolate on
X,Y,Z = np.mgrid[-dx:dx:pts, -dx:dx:pts, -dx:dx:pts]

# Interpolate the data
F = griddata(R, V, (X,Y,Z))

Desde aquí es muy fácil mostrar nuestros datos:

from mayavi.mlab import *
contour3d(F,contours=8,opacity=.2 )

Esto da un buen (grumoso) gaussiano.

ingrese la descripción de la imagen aquí

Eche un vistazo a los documentos de griddata, tenga en cuenta que puede cambiar el método de interpolación. Si tiene más puntos (tanto en la cuadrícula interpolada como en el conjunto de datos), la interpolación mejora y representa mejor la función subyacente que está tratando de ilustrar. Aquí está el ejemplo anterior en 10K puntos y una cuadrícula más fina:

ingrese la descripción de la imagen aquí

Puede usar el filtro delaunay3d para crear celdas a partir de puntos. Luego puede crear un iso_surface() para la salida UnstructuredGrid de delaunay3d. Si desea ImageData, puede usar el filtro image_data_probe.

import numpy as np
from tvtk.api import tvtk
from mayavi import mlab

points = np.random.normal(0, 1, (1000, 3))
ug = tvtk.UnstructuredGrid(points=points)
ug.point_data.scalars = np.sqrt(np.sum(points**2, axis=1))
ug.point_data.scalars.name = "value"
ds = mlab.pipeline.add_dataset(ug)
delaunay = mlab.pipeline.delaunay3d(ds)
iso = mlab.pipeline.iso_surface(delaunay)
iso.actor.property.opacity = 0.1
iso.contour.number_of_contours = 10
mlab.show()

ingrese la descripción de la imagen aquí

Te mostramos reseñas y puntuaciones

Si piensas que ha sido útil nuestro artículo, sería de mucha ayuda si lo compartieras con otros juniors de esta forma nos ayudas a extender nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *