2012-03-31 43 views
7

Necesito hacer una superficie 3D donde el color representará la cuarta variable. Sé que "surfear" es SIMILAR a lo que necesito, pero eso no es todo. Básicamente, tengo las siguientes variables:MATLAB: Necesito hacer un trazado 4D (3D + Color/Color)

t = [1: m]

y = [1: n]

a = [1: o]

Estos deberían ser los tres Ejes de corodinación cartesiana.

También tengo una variable S que es de dimensiones m x n x o, y es básicamente la amplitud, una función de las tres variables anteriores (es decir, S = f (t, y, a)). Quiero que esto se represente por color.

Para resumir, necesito un gráfico de la forma (t, y, a, S), donde las primeras tres variables son vectores de tamaños desiguales y la variable final es una matriz multidimensional cuyas dimensiones están determinadas por la primera Tres.

Gracias de antemano.

+0

lo acabaste haciendo? yuk resolver su problema? No olvides seleccionar una respuesta :) –

Respuesta

1

Siempre he usado scatter3 para colorear/dimensionar píxeles en el espacio 3D. Creo que la firma es:

scatter3(x,y,z, size, color) 

El tamaño y el color pueden ser escalares o un vector de longitud igual a las coordenadas. Usualmente uso el color o el tamaño para reflejar el cuarto atributo, dependiendo de lo que estoy mostrando. No tengo Matlab en esta máquina, así que perdónenme si mi memoria no es completamente precisa en cuanto al uso. "help scatter3" debería describirlo mucho mejor.

+0

Gracias, también me sugirieron esto en los foros de MATLAB. Lo miraré. Sin embargo, en mi caso, ¿qué haría con la variable de tamaño? A ese no me preocupa, pero estoy interesado en los otros cuatro. – Mike

+0

Tengo un conjunto de señales de dominio de tiempo que están separadas en el espacio, y he tomado la transformación de wavelet continua de ellas para obtener un escalograma. Por lo tanto, tengo tres variables como los ejes: tiempo (t), espacio (x) y escalas/frecuencia (a), así como el propio escalograma real, o más bien, un conjunto de escalogramas para cada uno de los diferentes espacialmente señales separadas. tiempo es de longitud 76050 escalas es de longitud 32 espacio es de longitud 4 Por lo tanto, el conjunto de escalogramas es una matriz multidimensional de longitud 32x76050x4, con los valores reales dentro que representa la amplitud. Es bastante confuso. – Mike

+0

Solo pensé en una idea. ¿Qué pasa si escalo las variables de forma adecuada para que sus tamaños puedan encajar en una función como surf o scatter3D? Entonces, actualmente, las variables son como 32x76050x4. Usando linspace o algo así, debería ser capaz de hacer que estos chicos se alineen. Déjame probar esto. – Mike

10

SCATTER3 requiere x, y y z y otros argumentos agrupación para ser vectores nx1 de igual tamaño para una sola serie o matrices NxM para la serie M.

Tiene datos 3D de espacio completo. Para hacer coordenadas vectores de igual tamaño utilizan la función MESHGRID (o NDGRID):

[X, Y, Z] = meshgrid(t, y, a); 

continuación, puede utilizar SCATTER3:

scatter3(X(:), Y(:), Z(:), [], S(:)) 

El problema es, ya que está lleno scatter3 datos de espacio no será útil sobre todo si tienes muchos puntos

Probablemente pueda filtrar su variable S (algo así como idx = S > 0), luego puede trazar los datos filtrados.

Si realmente necesita visualizar todos los datos, consulte Volume visualization en la documentación de MATLAB. Puedo recomendar la función SLICE, por ejemplo.

EDITAR

Aquí es un ejemplo de gráfica de espacio de dispersión 3D completo para vectores pequeños (m, n, o igual a 5) con S = rand([m,n,o]); scatter3(X(:), Y(:), Z(:), [], S(:), 'filled')

scatter example

EDIT 2

De tus comentarios t o la otra respuesta encontré que tienes una matriz de 32x76050x4. En realidad puede trazar rebanada 2D de a una por vez. puedes hacerlo en 2D con la función IMAGESC, o en 3D con la función SLICE.

Probar:

imagesc(S(:,:,k)) 

donde k es un número de 1 a 4 para la tercera dimensión.

o tratar de

slice(S, [], [], 1:size(S,3)) 
shading flat 

slice example

+0

¡Gracias, intentaré esto! ¡Te actualizaré cuando obtenga los resultados! = D – Mike

+0

¿Puedes publicar una captura de pantalla de cómo se ve, si es posible? Soy curioso. ¡Gracias! – rutgersmike

+0

Captura de pantalla de qué? ¿gráfico de dispersión? Recuerde que es un espacio completo, por lo que no tendrá mucho sentido a menos que filtre los datos. Puedo mostrarlo para pequeños vectores. – yuk