Pregunta

I want to plot two simultaneous plots in two different positions in Matlab, looped animations and both are different animations, one with hold on and another with hold off.

Also, one is 2D and one is 3D

I am doing something like this:

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. Do the set properties effect first axes? if so, how to avoid that?

Q2. In my plot hold on did not work. Both were instantenous. like using hold off. How do I make it work?

Q3. I hope the mov records both axes.

P.S. I hope clf is not a problem. I must use clf or if there are equivalents more suitable in my case do suggest me.

¿Fue útil?

Solución

You need to store the return from the axes function and operate specifically on a given axes with subsequent function calls, rather than just the current 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

Otros consejos

Here is a snippet from a piece of my code which plots orbits of three celestial bodies which I think will help you:

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

The two main functions you want are the drawnow and hold on.

Just to note: x,y,x2,y2,xa, and ya change with each iteration of the loop, I have just omitted that code.

EDIT: I believe the drawnow function will solve your problem with hold on.

I think this may solve your problem.

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top