2012-02-23 39 views
5

Quiero trazar puntos 3D en Matlab en diferentes colores dependiendo de un valor. Tengo el siguiente código, pero esto no funciona porque plot3d necesita un vector.Trazar puntos 3D en Matlab

x = vdhf_data.data(:,1); 
y = vdhf_data.data(:,2); 
z = vdhf_data.data(:,3); 
data = vdhf_data.data(:,4); 

grid on 
hold all 

for k=1:length(x) 
    if data(k) < 6 
     plot3d(x(k), y(k), z(k), 'ws--', 'MarkerEdgeColor', 'r', 'MarkerFaceColor', 'r') 
    else 
     plot3d(x(k), y(k), z(k), 'ws--', 'MarkerEdgeColor', 'g', 'MarkerFaceColor', 'g') 
    end 
end 

¿Cómo hacer eso en Matlab?

Respuesta

9

me gustaría utilizar

scatter3(x,y,z,ones(size(x)),data,'filled') 

Esto le trazar todos los puntos en el mismo tamaño y colorearlos según el valor de los datos, utilizando el mapa de colores actual. También puede usar datos para escalar el tamaño de cada punto.

scatter3(x,y,z,data.^-2,data,'filled') 
+0

I creen en lugar de 'los (tamaño (x))' el vector de tamaño en scatter3 puede ser valor escalar para el mismo tamaño o un vacío ('[] ') para el tamaño predeterminado. – yuk

+1

Sí, puede haber un escalar. Solo quiero tener dos colores de marcador. ¿Existe la posibilidad de agregar esto en una línea en lugar de un bucle? – Razer

+0

Simplemente tendrá que ajustar su mapa de colores. Entonces para dos colores (rojo y azul) harás algo como este 'colormap ([ones (50,1) * [1 0 0]; ones (50,1) * [0 0 1]])' Esto hará la división de color en el medio del rango de datos. Si quieres que esté en un número específico, debes escalar los que están (n-a, 1) unos (n + a, 1) en consecuencia – zamazalotta

Cuestiones relacionadas