Matlab как изменить расположение контурного графика на оси z

У меня есть 3d поверхность в моей фигуре surf(x,y,z)

у меня тоже есть contourf поверхность (которая в основном является 2D плоскостью).

Я рисую их на той же фигуре, но contourf сюжет автоматически на z=0 уровень. Я хочу переместить contourf заговор с z=-10 (или любое значение на оси Z), но я не могу этого сделать.

Я уверен, что это легко, но я не могу найти ответ в справке MATLAB /Google. Есть идеи?

1 ответ

Решение

Рассмотрим следующий пример:

%# 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

Скриншот


ОБНОВИТЬ:

Вышеупомянутое больше не работает в HG2. Это можно исправить используя скрытое свойство контуров ContourZLevel:

Z = peaks;
surf(Z), hold on
[~,h] = contourf(Z);
h.ContourZLevel = -10;

Вы также можете использовать hgtransform добиться аналогичной вещи, которая является документированным и рекомендуемым подходом.

Смотрите еще один мой ответ для дальнейшего объяснения: нанесите несколько двухмерных контурных графиков на одну 3d фигуру.

Другие вопросы по тегам