有没有办法将网格线放在等高线图的顶部?

时间:2013-09-19 02:58:29

标签: matlab 3d grid contour

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

enter image description here

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

我遇到了一个解决方案,但它只适用于2D(即在2D中查看轮廓图时),它涉及以下两个命令:

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

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

1 个答案:

答案 0 :(得分: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'))]));

enter image description here


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

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

enter image description here