Matlab:如何控制streamtube图的颜色?

时间:2015-03-24 07:36:54

标签: matlab plot colors velocity

我目前正在尝试绘制3D流水线。我希望管子的颜色对应于它们各自的速度(例如慢=蓝色,快=红色)。

更确切地说,我有三个3D矩阵,包含x,y和z方向的速度。流管的颜色应为sqrt(vx^2+vy^2+vz^2)。当使用streamtube(x,y,z,vx,vy,vz,sx,sy,sz)时,管子根据其z坐标着色,这是无用的,因为它无论如何都是3D图。

1 个答案:

答案 0 :(得分:2)

这不容易(它应该是内置选项),但通过修改每个管的CData(它们各自是它们自己的图形对象),您可以获得所需的结果。这是一个例子

load wind
[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15);
h=streamtube(x,y,z,u,v,w,sx,sy,sz);
drawnow
view(3)
axis tight
shading interp;

这给出了这样的图片: enter image description here

然后这样做:

vel=sqrt(u.^2+v.^2+w.^2); %// calculate velocities
for i=1:length(h)
    %// Modify the colour data of each tube
    set(h(i),'CData',interp3(x,y,z,vel,get(h(i),'XData')...
        ,get(h(i),'YData'),get(h(i),'ZData'),'spline'))
end
drawnow
view(3)
axis tight
shading interp;

给出了这个结果 enter image description here

注意:

1)我不知道这是否完全正确,我不知道如何测试

2)你必须将速度数据从它已知的点插入到流管的顶点

3)我发现spline插值选项效果最好,但其他选项可能在其他情况下效果更好