2012-02-23 70 views
5

Tôi muốn vẽ các điểm 3D trong Matlab bằng các màu khác nhau tùy thuộc vào giá trị. Tôi đã có mã sau đây, nhưng điều này không làm việc vì plot3d cần một vector.Vẽ các điểm 3D trong 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 

Làm cách nào để thực hiện điều đó trong Matlab?

Trả lời

9

Tôi sẽ sử dụng

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

này sẽ vẽ tất cả các điểm ở cùng kích thước và màu sắc cho họ theo giá trị của dữ liệu, sử dụng bản đồ màu hiện tại. Bạn cũng có thể sử dụng dữ liệu để mở rộng kích thước của mỗi điểm.

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

Tôi tin rằng thay vì 'kích thước (x (x))' vector kích thước trong phân tán3 có thể là giá trị vô hướng cho cùng kích thước hoặc trống ('[]') cho kích thước mặc định. – yuk

+1

Có thể có một vô hướng. Tôi chỉ muốn có hai nhãn hiệu. Có khả năng để thêm điều này trong một dòng thay vì một vòng lặp? – Razer

+0

Bạn sẽ chỉ cần điều chỉnh bản đồ màu của mình. Vì vậy, đối với hai màu (đỏ và xanh dương), bạn sẽ làm một cái gì đó như thế này 'colormap ([những người (50,1) * [1 0 0]; những người (50,1) * [0 0 1]])' Điều này sẽ làm cho bộ phận màu ở giữa phạm vi dữ liệu. Nếu bạn muốn nó ở một số cụ thể, bạn phải mở rộng tỷ lệ (n-a, 1) (n + a, 1) cho phù hợp – zamazalotta

Các vấn đề liên quan