Matlab, как изменить расположение контурного графика на оси z - PullRequest
7 голосов
/ 08 ноября 2011

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

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

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

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

1 Ответ

10 голосов
/ 08 ноября 2011

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

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

screenshot


UPDATE:

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

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

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

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

...