在Matlab中使用meshz命令

在Matlab中使用meshz命令,matlab,plot,matlab-figure,Matlab,Plot,Matlab Figure,我已经完成了以下代码: u=linspace(0,1,40); v=linspace(0,1,40); [u,v]=meshgrid(u,v); x=u; y=v.*sqrt(u); z=x+y+1; meshz(x,y,z) xlabel('x-axis') ylabel('y-axis') 它给出了以下图像: 现在,我想将网格墙减小到x-y平面(在z=0)。我尝试了以下方法,但无效: u=linspace(0,1,40); v=linspace(0,1,40); [u,v]=meshgr

我已经完成了以下代码:

u=linspace(0,1,40);
v=linspace(0,1,40);
[u,v]=meshgrid(u,v);
x=u;
y=v.*sqrt(u);
z=x+y+1;
meshz(x,y,z)
xlabel('x-axis')
ylabel('y-axis')
它给出了以下图像:

现在,我想将网格墙减小到x-y平面(在
z=0
)。我尝试了以下方法,但无效:

u=linspace(0,1,40);
v=linspace(0,1,40);
[u,v]=meshgrid(u,v);
x=u;
y=v.*sqrt(u);
z=x+y+1;
meshz(x,y,z)
xlabel('x-axis')
ylabel('y-axis')
v=axis;
v(5)=0;
axis(v)
这将产生以下图片:


我尝试了一些其他的方法,比如最后一个代码:添加
hold-on
,再次调用
meshz(x,y,z)
,但都不起作用。如何将
meshz
墙向下延伸到x-y平面?

一种方法是直接操纵通过以下方式生成的
'ZData'

产生


我认为这可能是唯一的办法。在
meshz.m
中,它通过
zref=min(min(z(isfinite(z)))获得“窗帘”边缘的下限。因此,除了将输入中的一个点设置为较低的值并弄乱网格的形状之外,我看不到任何其他好方法。好的Q和A。+1秒@chappjc:我想尝试这样的东西,它看起来很脏,可能会很脆弱。令人惊讶的是,这个函数没有内置的这类东西的选项。这也许是件好事…@霍奇勒:好极了!但是,我对Z(:,[2 end-1])=0;行很好奇;。使用这个代码,我旋转了这个图形,然后发现背面是不同的颜色,从最大的z到z=1,然后从z=1到z=0,相同的绿色墙。当我将此行更改为Z(:,[1 end])=0;,然后我从上到下得到了相同的图像和相同的绿色。想法?@David:接得好。我转置了一些条目。我已经修正了我答案中的那一行。您可以使用
Z(:,[1 end])=0
Z(2:end-1,[1-end])=0。后者只是不将零重写为上面一行中已设置为零的第一个和最后一个元素。它可能不会更快。
...
h = meshz(x,y,z);   % Get handle
Z = get(h,'ZData'); % Get ZData
Z([1 end],:) = 0;   % Set border to 0, or other desired value
Z(2:end-1,[1 end]) = 0;
set(h,'ZData',Z);   % Set ZData
...