2012-02-23 179 views
5

我想根据值以不同颜色绘制Matlab中的3D点。我有以下代码,但这不起作用,因为plot3d需要一个向量。在Matlab中绘制3D点

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

相信代替'酮(大小(X))中'scatter3大小载体可以是用于默认大小相同的大小或空('[]')标量值。 – yuk 2012-02-23 17:43:22

+1

是的,可以有一个标量。我只想要两个标记颜色。有没有可能在一行而不是循环中添加它? – Razer 2012-02-23 18:07:39

+0

你只需要调整你的色彩地图。所以对于两种颜色(红色和蓝色),你会做这样的'色彩映射([ones(50,1)* [1 0 0]; ones(50,1)* [0 0 1]])'这将使数据范围中间的颜色划分。如果你想要它在一个特定的数字,你必须相应地缩放(n-a,1)个(n + a,1) – zamazalotta 2012-02-23 18:20:26