【问题标题】:Matlab: How can I control the color of a streamtube plot?Matlab:如何控制流管图的颜色?
【发布时间】:2015-03-24 07:36:54
【问题描述】:

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

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

【问题讨论】:

    标签: matlab plot colors velocity


    【解决方案1】:

    这并不容易(它应该是一个内置选项),但是通过修改每个管的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;
    

    这给出了这张图片:

    然后这样做:

    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;
    

    给出这个结果

    注意事项:

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

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

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

    【讨论】:

    • 这太棒了! +1。一般来说,样条插值应该是最好的,
    • 这就是我一直在寻找的!我不知道,可以使用h(i) 访问每个流管。谢谢!
    猜你喜欢
    • 2020-01-25
    • 2017-12-28
    • 1970-01-01
    • 2012-01-23
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多