Как я могу изменить свой код ниже, чтобы отображать контурные уровни с помощью цикла for?

Приведенный ниже код строит несколько контурных карт в разных местах по оси Z, заданной Zlevel. Однако у меня есть несколько точек интереса 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. Поэтому, если бы кто-то мог помочь мне и объяснить, почему я не могу делать то, что я пытаюсь сделать, и указать мне правильное направление, я был бы очень признателен!

Спасибо!


person dareToDiffer07    schedule 08.12.2019    source источник
comment
Что не работает? Результат не тот, что вы ожидали? Вы получаете ошибку? Можете ли вы отредактировать свой вопрос и уточнить, как бы вы хотели, чтобы сюжет выглядел, и что не работает, как вы? мне нравится. 'Вероятно, я не понимаю, как работает Matlab с объектами.' Вы должны иметь возможность поместить графические дескрипторы в массив и установить свойства, как вы это делаете, так что это может быть не проблема.   -  person rinkert    schedule 08.12.2019
comment
Какая у вас ошибка?   -  person Daniel    schedule 09.12.2019


Ответы (1)


Я не очень хорошо понимаю, зачем вам нужно 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)

введите здесь описание изображения

person Ander Biguri    schedule 09.12.2019