为什么即使我指定了我的Z限制也没有设置?

时间:2017-10-31 20:31:15

标签: matlab animation graph matlab-figure axis

请参阅下面的代码:

x = linspace(-2*pi,2*pi,100);
y = linspace(-2*pi,2*pi,100);
[X,Y] = meshgrid(x,y);

for t = linspace(0,2*pi,400);
    Z = sin(sqrt(X.^2 + Y.^2 + t)) ./ (X.^2 + Y.^2 + t);
    figure(1); surf(X,Y,Z);
    pause(0.01)
    surf(X,Y,Z);
    az = 90;
    el = 25;
    figure(2);view(az,el);
    xlim([-10,10]);
    ylim([-10,10]);
    zlim([-1,1]);
end

为什么z限制仍然保持不变,即使设置为[-1 1]

2 个答案:

答案 0 :(得分:3)

您的问题是,每次在循环中调用surf时,您都会重新创建整个绘图,从而丢弃您之前对轴限制所做的任何更改等。制作动画图时,它会进行动画处理。如果使用set更新graphics objects而不是完全复制它们,则效率更高(并且更容易控制轴设置),如图here所示。

这是创建所需动画的更好方法:

% Initialize data:
x = linspace(-2*pi, 2*pi, 100);
y = linspace(-2*pi, 2*pi, 100);
[X, Y] = meshgrid(x, y);
Z = sin(sqrt(X.^2 + Y.^2)) ./ (X.^2 + Y.^2);

% Create plot objects and set axes settings:
hSurf = surf(X, Y, Z);
view(90, 25);
xlim([-10 10]);
ylim([-10 10]);
zlim([-1 1]);

% The animation loop:
for t = linspace(0, 2*pi, 400)
  Z = sin(sqrt(X.^2 + Y.^2 + t)) ./ (X.^2 + Y.^2 + t);  % Recalculate Z
  set(hSurf, 'ZData', Z);  % Update surface Z data
  pause(0.01);  % Pause/refresh plot
end

答案 1 :(得分:-1)

我认为view()函数会覆盖/忽略x yz的大小。

编辑: view([x,y,z])将视图方向设置为笛卡尔坐标x,y和z。 (x,y,z)的大小被忽略。 来自here