2012-02-23 5 views
5

Я хочу построить 3D-точки в Matlab в разных цветах в зависимости от значения. У меня есть следующий код, но это не работает, потому что plot3d нужен вектор.Участок 3D-точки в 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 

Как это сделать в Matlab?

ответ

9

Я хотел бы использовать

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

Это будет строить все точки в том же размере и покрасить их в соответствии со значением данных, используя текущую цветовую палитру. Вы также можете использовать данные для масштабирования размера каждой точки.

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

Я считаю, что вместо 'те (размер (х))' вектор размер в scatter3 может быть скалярным значением для того же размера или пустой ('[]') для размера по умолчанию. – yuk

+1

Да может быть скаляр. Я хочу иметь только два маркера. Есть ли возможность добавить это в одну строку вместо цикла? – Razer

+0

Вам просто нужно будет настроить свою цветовую карту. Итак, для двух цветов (красный и синий) вы сделаете что-то вроде этого 'colormap ([ones (50,1) * [1 0 0]; ones (50,1) * [0 0 1]]). Это сделает разделение цвета в середине диапазона данных. Если вы хотите, чтобы он находился на определенном номере, вы должны масштабировать (n-a, 1) единицы (n + a, 1) соответственно – zamazalotta

Смежные вопросы