阻止Matlab在创建动画gif时调整表面大小

5
我想使用Matlab2013(Linux 64位)创建一个360度旋转的表面图。我可以使用下面的代码片段创建一个动画gif,但是Matlab在动画的某些帧上调整了表面大小(例如请参见[1],第56-59帧)。您有什么办法可以防止Matlab调整绘图表面的大小吗?感谢您提前的建议。
function createVideo( FigureHandler, filename )
grid on
set(gca,'ZTickLabel',[]);
set(gca,'YTickLabel',[]);
set(gca,'XTickLabel',[]);
for n = 1:360
    view(n,66)
    zoom off
    drawnow
    frame = getframe(FigureHandler);
    im = frame2im(frame);
    [imind,cm] = rgb2ind(im,256);
    if n == 1;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf);
    else
        imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0);
    end
end
end

[1] http://postimg.org/image/prib1psq5/


你能否发布view(n, 66)的代码或者一个简化版本,以显示调整大小的过程?它是否依赖于imwrite,或者只要查看Matlab图像,而不创建动画gif,就可以看到它呢? - Trilarion
1
view 是 Matlab 自带的功能(它是 graph3d 工具箱的一部分)。 - RTL
1个回答

3
问题是由于视图更改而导致坐标轴限制发生变化,可以通过手动设置轴限制或设置轴属性'XLimMode'、'YLimMode'和'ZLimMode'为'manual'来防止这种情况发生。
但是其他属性(例如DataAspectRatio、PlotBoxAspectRatio等)会在旋转时导致图形缩放。然而,Matlab提供了vis3d轴模式来自动设置所有这些内容!您只需要添加以下代码:
axis('vis3d')

应将其放置在设置刻度等内容之后... 但在循环外部。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接