理解补丁行为

时间:2017-08-30 05:41:18

标签: matlab plot

我不明白为什么patch不遵循此图片中的行:

ex

事实上,在我使用的代码中,行和补丁共享相同的输入变量XY

clearvars
close all
clc

figure(1)
z=peaks(50);

% Create x,y coordinates of the data
[x,y]=meshgrid(1:50);

% Plot Data and the slicing curve
surf(z);
hold on

X=[1 21 35 47 29 25 8];
Y=[5 19 24 26 14 39 47];

plot3(X,Y,-10*ones(1,numel(X)),'r','linewidth',3);
plot3(X,Y,10*ones(1,numel(X)),'r','linewidth',3);

patch([X fliplr(X)],[Y fliplr(Y)],[-10*ones(1,numel(X)) 10*ones(1,numel(X))],...
    'r','FaceAlpha',0.21)

axis([0 50 0 50])

我搞砸了什么?

1 个答案:

答案 0 :(得分:2)

您将错误的参数传递给patch。 Matlab文档说明了

  

如果XData是一个矩阵,那么每列代表补丁的单个面的x坐标。

因此,补丁数据应如下所示:

XData= [
X(1) X(2) ... and so on
X(2) X(3)
X(2) X(3)
X(1) X(2)];

YData= [
Y(1) Y(2) ... 
Y(2) Y(3)
Y(2) Y(3)
Y(1) Y(2)];

ZData= [
-10 -10 ...
-10 -10
 10 10
 10 10];

您可以这样使用patch

patch([X(1:end-1);X(2:end);X(2:end);X(1:end-1)],[Y(1:end-1);Y(2:end);Y(2:end);Y(1:end-1)],...
    [-10*ones(1,numel(X)-1);-10*ones(1,numel(X)-1);10*ones(1,numel(X)-1);10*ones(1,numel(X)-1)],...
    'r','FaceAlpha',0.21)

或者您可以使用surf

surf([X;X],[Y;Y],[-10*ones(1,numel(X)) ;10*ones(1,numel(X))],'FaceAlpha',0.21);