1

我想在 Matlab 中的两个不同位置同时绘制两个图,循环动画,两者都是不同的动画,一个暂停,另一个暂停。

还有,一个是2D,一个是3D

我正在做这样的事情:

for i=1:some_number
    axes('position',...)
    plot(...);hold on;
    axes('position',...)
    clf
    plot3(...) (or fill3 but has to do with 3d rendering)
    view(...)
    set(gca, 'cameraview',...)
    set(gca,'projection',...)
    mov(i)=getframe(gcf)
end

Q1。设置属性会影响第一个轴吗?如果是这样,如何避免这种情况?

Q2。在我的情节中,坚持没有用。两者都是瞬间的。喜欢使用延迟。我如何使它工作?

Q3。我希望 mov 记录两个轴。

PS我希望clf不是问题。我必须使用 clf 或者如果有更适合我的情况的等价物,请建议我。

4

2 回答 2

2

您需要存储函数的返回axes值,并通过后续函数调用专门给定轴进行操作,而不仅仅是当前轴。

% Create axes outside the loop
ax1 = axes('position',...);
ax2 = axes('position',...);

hold(ax1, 'on');

for i=1:some_number
    plot(ax1, ...);

    cla(ax2); % use cla to clear specific axes inside the loop
    plot3(ax2, ...) (or fill3 but has to do with 3d rendering)
    view(ax2, ...)
    set(ax2, 'cameraview',...)
    set(ax2,'projection',...)

    mov(i)=getframe(gcf)
end
于 2013-06-13T12:56:33.243 回答
1

这是我的一段代码的片段,它绘制了三个天体的轨道,我认为这会对你有所帮助:

for i = 1:j,   %j is an arbitrary number input by the user

    plot(x, y, '*')
    plot(x2, y2, 'r')
    plot(xa, ya, '+')

    grid on
    drawnow   %drawnow immediately plots the point(s)
    hold on   %hold on keeps the current plot for future plot additions

    %dostuff to x,y,x2,y2,xa,ya

end

您想要的两个主要功能是drawnowhold on

请注意:x、y、x2、y2、xa 和 ya 会随着循环的每次迭代而变化,我只是省略了该代码。

编辑:我相信该drawnow功能将解决您的问题hold on

我认为这可能会解决您的问题。

for i=1:some_number
    axes('position',...)
    plot(...);

    drawnow      %also note that you must not put the ; at the end
    hold on      %see above comment

    axes('position',...)
    clf
    plot3(...) (or fill3 but has to do with 3d rendering)
    view(...)
    set(gca, 'cameraview',...)
    set(gca,'projection',...)
    mov(i)=getframe(gcf)
end
于 2013-06-13T13:00:40.823 回答