如何在Matlab中绘制(或)遮盖Surface plot图表下方的区域?

hks*_*hks 6 matlab

我正在尝试为以下方程式t_t <=(xi_i-xi_j)绘制3D表面图。sqrt(rho)。我已经包含了我的代码。但我想在此表面曲线图的下方标记或阴影区域。我该如何解决?

[X,Y] = meshgrid(1:0.5:10,1:20);

Z = X.* sqrt(Y);

figure;

colormap(jet)

surf(X,Y,Z) 

colorbar

xlabel('Distance between two spatial points \xi_i & \xi_j (\xi_i - \xi_j)');

ylabel('Density(\rho)');

zlabel('Transmission Delay (t_t)');
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

gno*_*ice 5

您可以通过建立一组要传递给的新矩阵来添加额外的曲面surf,并根据您希望结果的外观使用一些不同的选项...

选项1:填充侧面和一个表面对象:

如果您只想填写侧面,则可以在矩阵的每一侧添加新的行和列,如下所示:

[R, C] = size(Z);
Xfill = [nan X(1, :) nan; X(:, [1 1:C C]); nan X(R, :) nan];
Yfill = [nan Y(1, :) nan; Y(:, [1 1:C C]); nan Y(R, :) nan];
Zfill = [nan zeros(1, C) nan; zeros(R, 1) Z zeros(R, 1); nan zeros(1, C) nan];

surf(Xfill, Yfill, Zfill);
view(-120, 30);
Run Code Online (Sandbox Code Playgroud)

这样,您只需调用一次即可绘制表面和侧面,surf结果如下:

在此处输入图片说明


选项#2:填充侧面和底部,一个表面对象:

如果您还想填充形状的底部,可以通过添加新列然后在顶部和底部添加新行以封闭末端来在其周围和下方包裹曲面:

[R, C] = size(Z);
Xfill = [X(1, 1:C) nan(1, C+1); ...  % Close top
         X flip(X, 2) X(:, 1); ...   % Flip data and connect to other side
         X(R, 1:C) nan(1, C+1)];     % Close bottom
Yfill = [Y(1, 1:C) nan(1, C+1); ...
         Y flip(Y, 2) Y(:, 1); ...
         Y(R, 1:C) nan(1, C+1)];
Zfill = [zeros(1, C) nan(1, C+1); ...
         Z zeros(R, C) Z(:, 1); ...
         zeros(1, C) nan(1, C+1)];

surf(Xfill, Yfill, Zfill);
view(-120, -20);
Run Code Online (Sandbox Code Playgroud)

同样,您可以通过调用来绘制整个封闭曲面surf。这是从下方看的视图,显示了封闭的底部:

在此处输入图片说明


选项3:为侧面添加单独的曲面对象:

将所有内容绘制为一个对象时,如果要以不同于顶部的方式渲染侧面,则会受到限制。像Ander一样(使用patch或单独调用surf)将侧面分开,可以更好地控制它们相对于顶面的颜色。要为所有四个侧面制作一个单个曲面对象,可以提取矩阵边缘周围的条目并根据需要复制它们:

[R, C] = size(Z);
Xside = [1; 1]*[X(1, :) ...           % Get first row
                X(2:R, C).' ...       % Get last column, without first row
                X(R, (C-1):-1:1) ...  % Get last row, without last column, flipped
                X((R-1):-1:1, 1).'];  % Get first column, without last row, flipped
Yside = [1; 1]*[Y(1, :) ...
                Y(2:R, C).' ....
                Y(R, (C-1):-1:1) ...
                Y((R-1):-1:1, 1).'];
Zside = [Z(1, :) ...
         Z(2:R, C).' ...
         Z(R, (C-1):-1:1) ...
         Z((R-1):-1:1, 1).'; ...
         zeros(1, 2*(R+C)-3)];

surf(X, Y, Z);  % Plot top surface
hold on;
surf(Xside, Yside, Zside, ...  % Plot all four sides...
     'EdgeColor', 'none', ...  %   with no edge coloring (i.e. grid)...
     'FaceAlpha', 0.5);        %   and transparency
view(-120, 30);
Run Code Online (Sandbox Code Playgroud)

和结果情节:

在此处输入图片说明