4

我正在使用 contourf 函数创建等高线图:

在此处输入图像描述

我想让网格线出现在显示轮廓的平面顶部。

我遇到了一种解决方案,但它仅适用于 2D(即当您查看 2D 中的等高线图时),它涉及以下两个命令:

grid on
set(gca,'layer','top');

但是,在 3D 中查看轴时不会出现网格线。有没有办法简单地做到这一点?

4

1 回答 1

3

您可以使用line重写网格线的对象操作或称为 gridxy的小型 FEX 工具来完成此操作。例如,让我们重新创建一个具有相同属性的图形:

figure
set(gcf,'Renderer','OpenGL')

%# plot surface and contour
Z = peaks;
surf(Z), hold on
[~,h] = contourf(Z);       %# get handle to contourgroup object

%# change the ZData property of the inner patches
hh = get(h,'Children');    %# get handles to patch objects
for i=1:numel(hh)
    zdata = ones(size( get(hh(i),'XData') ));
    set(hh(i), 'ZData',-10*zdata)
end

并添加额外的网格线:

v = get(gca);
hg=gridxy(get(gca,'XTick'),get(gca,'YTick'), 'Color',[1,1,1]*0.25,'Linestyle',':');
set(hg,'Zdata',repmat(v.ZLim(1)+eps,[1 numel(get(hg,'Ydata'))]));

在此处输入图像描述


但是,有理由不使用surfc吗?例如:

Z = peaks(20);
surfc(Z);
view(-45, 20);

在此处输入图像描述

于 2013-09-19T07:32:09.570 回答