如何在Matlab绘图中将曲面设置为单色(无渐变)?

17

我的数据集由三个向量(x,y和z)组成。我使用plot3(x,y,z)将这些值作为点绘制在3D图中,这很好。我还想在同一个图中显示一个平面。为了获取该图的数据,我使用x和y的线性回归来得到一个新的z。

它的效果如下图所示:

alt text
(来源:bildr.no

我希望surf仅填充一种颜色(比如浅蓝色或灰色),并设置透明度,以便它可以透过看到底层的图形。我该怎么做?

4个回答

26

创建表面仅具有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;light;lighting phong;:) - Pedro77

4

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

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

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处。所以这似乎不是一个好的解决方案。 - David Ketcheson

4

在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);

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

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接