我如何修改下面的代码以使用 for 循环绘制等高线水平?

How can I modify my code below to plot contour levels with a for loop?

下面的代码在 Zlevel 指定的 Z 轴上的不同位置绘制多个等高线图。但是,我有多个感兴趣的 Z 数据点,因此我想使用 for 循环。

Zlevel=[0 1];

figure(1)
hold on 
[~,h1]=contourf(xx,yy,zz(:,:,1)); h1.ContourZLevel=Zlevel(1);
hold on 
[~,hh1]=contour(xx,yy,yy); hh1.ContourZLevel=h1.ContourZLevel;  
hold on 
[~,h2]=contourf(xx,yy,zz(:,:,2)); h2.ContourZLevel=Zlevel(2);
hold on 
[~,hh2]=contour(xx,yy,yy);hh2.ContourZLevel=h2.ContourZLevel;
hold off

我想我可以有这样的东西:

figure(1); hold on;
for i=1:length(Zlevel)
    [~,h(i)]=contourf(xx,yy,zz(:,:,i)); h(i).ContourZLevel=Zlevel(i); 
    hold on
    [~,hh(i)]=contour(xx,yy,yy); hh(i).ContourZLevel=Zlevel(i);
    hold on 
end
hold off

我试过了,还是不行。我可能不了解 matlab 的对象处理。因此,如果有人可以帮助我并向我解释为什么我不能做我想做的事情并为我指明正确的方向,我将不胜感激!

谢谢!

我不太明白为什么每个图需要调用 2 次 contourf,因为 secodn 应该只会在图像上创建一些错误的线条....

这是你想要的吗?

% dummy data
[xx,yy,zz] = peaks;
zz(:,:,2)=-zz(:,:,1);
zz(:,:,3)=-2*zz(:,:,1);
zz(:,:,4)=2*zz(:,:,1);



Zlevel=[0 0.25 0.5 1];

figure(1)
hold on
for ii=1:length(Zlevel)
    [~,h(ii)]=contourf(xx,yy,zz(:,:,ii)); h(ii).ContourZLevel=Zlevel(ii);

end
view(3)