【问题标题】:How do I set a surf to one color (no gradient) in my matlab-plot?如何在我的 matlab 图中将冲浪设置为一种颜色(无渐变)?
【发布时间】:2019-07-14 00:09:38
【问题描述】:

我的数据集由三个向量(x、y 和 z)组成。我使用 plot3(x,y,z) 将这些值绘制为 3d 图中的点,这很好。我也想在同一个情节中展示一架飞机。为了得到这个图的数据,我对 x 和 y 使用线性回归来得到一个新的 z。

看起来是这样的:


(来源:bildr.no

我希望只用一种颜色(比如浅蓝色或灰色)填充海浪并设置不透明度,使其透明。我该怎么做?

【问题讨论】:

    标签: graphics matlab


    【解决方案1】:

    创建只有一种颜色和给定透明度值的表面的最简单方法是设置表面对象的“FaceColor”和“FaceAlpha”属性:

    hSurface = surf(...your arguments to create the surface object...);
    set(hSurface,'FaceColor',[1 0 0],'FaceAlpha',0.5);
    

    此示例将表面颜色设置为红色,并将透明度设置为 0.5。您也可以设置边缘属性(使用“EdgeColor”和“EdgeAlpha”)。

    【讨论】:

    • 如果您还想要有光泽的表面(适用于曲线图)。看一下:shading interp;光;灯管; :)
    【解决方案2】:

    我不清楚你想做什么。当您为冲浪说一种颜色时,您是指完全一种颜色,还是您的意思是您想要灰色阴影?

    这里有一些代码可以做各种各样的事情,你可以选择使用哪些行:

    x = rand(1,20);
    y = rand(1,20);
    z = rand(1,20);
    
    [X,Y] = meshgrid(linspace(0,1,10),linspace(0,1,10));
    Z = rand(10)*0.1;
    
    clf
    plot3(x,y,z,'.');
    hold on
    h = surf(X,Y,Z)
    hold off
    
    %% This will change the color
    colormap(copper)
    %% This will remove colordata
    set(h, 'cdata',zeros(10))
    %% This will make transparent
    alpha(0.5)
    

    【讨论】:

    • 我试过这个。在任何地方将 cdata 设置为零会移动平面,使其位于 z=0 处。所以这似乎不是一个好的解决方案。
    【解决方案3】:

    完成gnovice的回答,可能需要set(hsurface...)中的额外成分(Matlab R2010b 64):

    hSurface = surf(...your arguments to create the surface object...);
    set(hSurface, 'FaceColor',[1 0 0], 'FaceAlpha',0.5, 'EdgeAlpha', 0);
    

    使绘制表面的点对点边缘不可见

    【讨论】:

      【解决方案4】:

      @matlabDoug 有你需要的东西,我想。属性cdata 保存颜色数据,该数据获取应用到它的颜色图。将其设置为与您的表面数据大小相同的数组,该数组中的每个元素具有相同的值,将使您的表面成为一种颜色。使用默认颜色图,将 cdata 中的所有内容设置为零将使您的表面变为蓝色,将所有内容设置为 1 将使表面变为红色。然后你可以使用 alpha 使其透明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-01
        • 1970-01-01
        • 2022-12-05
        • 2019-03-01
        • 1970-01-01
        • 2019-09-04
        • 2021-07-08
        • 2016-12-15
        相关资源
        最近更新 更多