数据可视化 - 具有参数颜色的表面

时间:2015-06-12 11:57:12

标签: matlab plot

我在笛卡尔坐标X,Y,Z中有一组3D点。对于每个这样的点,我关联存储在向量C中的值。我希望能够用由C给出的颜色对由X,Y,Z给出的表面着色。或者,如果可能的话,我想关联到每个从有限数量的给定颜色中指出颜色。在Matlab中,这可以使用surf(X,Y,Z,C),但X,Y必须是网格形式(由meshgrid生成),而不是一般形式,就像我的情况一样。

我设法在球体的情况下这样做,但是程序并不漂亮,并且它大量使用了球体的参数化。这是我想要做的一个例子(在球体的情况下)。 enter image description here

  

有没有办法在Matlab中进行这种类型的表面着色? (如果有帮助的话,我还可以提供除了X,Y,Z点之外的曲面三角剖分)

     

是否有另一款软件可以做类似的事情,并且可以用某种方式与Matlab接口?

2 个答案:

答案 0 :(得分:1)

我的基础是Matlab's Representing Data as a Surface。这有用吗?

xlin = linspace(min(x),max(x),33);
ylin = linspace(min(y),max(y),33);
[X,Y] = meshgrid(xlin,ylin);
f = scatteredInterpolant(x,y,z);
Z = f(X,Y);

g = scatteredInterpolant(x,y,c);
C = g(X,Y);

surf(X, Y, Z, C)

答案 1 :(得分:0)

感谢Ander Biguri建议补丁。这就是我提出的,似乎工作得很好。

function patch_color_plot(struc)
% struc is a structure containing at least the following:
% points - the coordinate of the points in a 3xN matrix
% t      - the triangulation matrix
% x_0s   - the point values

fac  = struc.t;
vert = struc.points;
fvc  = struc.x_0s;

p =  patch('Faces',fac,'Vertices',vert,'FaceVertexCData',...
            fvc,'FaceColor','interp');

set(p,'EdgeColor','none')
axis equal
axis off`

以下是一个示例结果:

enter image description here

另一个带圆环的人:

enter image description here

这是另一个例子:

enter image description here