【发布时间】:2023-03-24 03:57:01
【问题描述】:
我的图中有一个 3d 表面 surf(x,y,z)
我还有一个contourf 表面(基本上是一个二维平面)。
我将它们绘制在同一个图中,但contourf 绘图自动位于z=0 级别。我想将contourf 绘图移动到z=-10(或z 轴上的任何值),但我做不到。
我确信这很容易,但我在 MATLAB 帮助/Google 中找不到答案。 有什么想法吗?
【问题讨论】:
我的图中有一个 3d 表面 surf(x,y,z)
我还有一个contourf 表面(基本上是一个二维平面)。
我将它们绘制在同一个图中,但contourf 绘图自动位于z=0 级别。我想将contourf 绘图移动到z=-10(或z 轴上的任何值),但我做不到。
我确信这很容易,但我在 MATLAB 帮助/Google 中找不到答案。 有什么想法吗?
【问题讨论】:
考虑以下示例:
%# 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 来实现类似的事情,这是记录和推荐的方法。
请参阅我的另一个答案以获得进一步的解释:plot multiple 2d contour plots in one 3d figure。
【讨论】:
set(hh, {'ZData'}, cellfun(@(x) -10*ones(size(x)), get(hh,{'XData'}), 'UniformOutput',false))