2012-02-23 9 views
5

Je souhaite tracer des points 3D dans Matlab dans différentes couleurs en fonction d'une valeur. J'ai le code suivant, mais cela ne fonctionne pas car plot3d a besoin d'un vecteur.Tracer des points 3D dans 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 

Comment faire ça dans Matlab?

Répondre

9

J'utiliser

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

Ce tracera tous les points à la même taille et les couleurs en fonction de la valeur des données, en utilisant la palette de couleurs actuelle. Vous pouvez également utiliser des données pour redimensionner la taille de chaque point.

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

je crois au lieu de 'ceux (la taille (x))' le vecteur de taille dans scatter3 peut être une valeur scalaire pour la même taille ou un vide ('[]') pour la taille par défaut. – yuk

+1

Oui, il peut y avoir un scalaire. Je veux seulement avoir deux markercolors. Est-il possible d'ajouter ceci dans une ligne au lieu d'une boucle? – Razer

+0

Vous aurez juste besoin d'ajuster votre palette de couleurs. Donc, pour deux couleurs (rouge et bleu), vous ferez quelque chose comme ceci 'colormap ([ones (50,1) * [1 0 0]; ones (50,1) * [0 0 1]])' Cela rendra la division des couleurs au milieu de la plage de données. Si vous voulez qu'il soit à un nombre spécifique, vous devez redimensionner ceux (n-a, 1) ceux (n + a, 1) en conséquence – zamazalotta

Questions connexes