MATLAB: Making movies with subplot.

animationmoviesubplotvideo

I've been trying to export an animation with subplots. So far, the code is:
syms t;
l1 = 38;
l2 = 27;
l3 = 09;
T43 = [ 1 0 0 0 ; 0 1 0 0 ; 0 0 1 l1 ; 0 0 0 1 ];
T76 = [ 1 0 0 0 ; 0 1 0 0 ; 0 0 1 l2 ; 0 0 0 1 ];
T109= [ 1 0 0 0 ; 0 1 0 0 ; 0 0 1 l3 ; 0 0 0 1 ];
video = VideoWriter('newfile.mp4','MPEG-4');
open(video);
for t = 1:1:100
teta1 = pi+pi/4*(cos((pi/50)*t)-1); % ponto de referência = pi (0) -- variação = ( 0 -- -180 )
teta2 = (pi/2)*sin((pi/50)*t); %(7/12)*sin((pi/50)*t); % ponto de referência = 0 (0) -- variação = (30 -- 0 -- -180 )
teta3 = 0; % ponto de referência = 0(0) -- variação = (-90 -- 0 -- 90 )
teta4 = pi/4*(cos((pi/50)*t)-1); % ponto de referência = 0 (0) -- variação = (0 -- -150 )
teta5= 0; % ponto de referência = 0 (0) -- variação = (-90 -- 0 -- 90 )
teta6= 0; % ponto de referência = 0 (0) -- variação = (-90 -- 0 -- 90 )
teta7= 0; % ponto de referência = 0 (0) -- variação = (-30 -- 30 )
R10 = [ 1 0 0 0 ; 0 cos(teta1) -sin(teta1) 0 ; 0 sin(teta1) cos(teta1) 0 ; 0 0 0 1 ];
R21 = [ cos(teta2) 0 -sin(teta2) 0 ; 0 1 0 0 ; sin(teta2) 0 cos(teta2) 0 ; 0 0 0 1];
R32 = [ cos(teta3) sin(teta3) 0 0 ; -sin(teta3) cos(teta3) 0 0 ; 0 0 1 0 ; 0 0 0 1 ];
R54 = [ cos(teta4) 0 -sin(teta4) 0 ; 0 1 0 0 ; sin(teta4) 0 cos(teta4) 0 ; 0 0 0 1];
R65 = [ cos(teta5) sin(teta5) 0 0 ; -sin(teta5) cos(teta5) 0 0 ; 0 0 1 0 ; 0 0 0 1 ];
R87 = [ 1 0 0 0 ; 0 cos(teta6) -sin(teta6) 0 ; 0 sin(teta6) cos(teta6) 0 ; 0 0 0 1 ];
R98 = [ cos(teta7) 0 -sin(teta7) 0 ; 0 1 0 0 ; sin(teta7) 0 cos(teta7) 0 ; 0 0 0 1];
A = [0 0 0];
Br = R10*R21*R32*T43;
B = [ Br(1,4) Br(2,4) Br(3,4)];
Cr=R10*R21*R32*T43*R54*R65*T76;
C = [ Cr(1,4) Cr(2,4) Cr(3,4)];
Dr = R10*R21*R32*T43*R54*R65*T76*R87*R98*T109;
D = [ Dr(1,4) Dr(2,4) Dr(3,4)];
subplot(2,2,1)
plot3( [A(1),B(1)] , [A(2),B(2)] , [A(3),B(3)] , 'k-o' , 'LineWidth' , 1.5 )
hold on
plot3( [B(1),C(1)] , [B(2),C(2)] , [B(3),C(3)] , 'b-o' , 'LineWidth' , 1.5 )
hold on
plot3( [C(1),D(1)] , [C(2),D(2)] , [C(3),D(3)] , 'r-o' , 'LineWidth' , 1.5 )
xlabel('x (cm)') , ylabel('y (cm)') , zlabel('z (cm)')
title ( 'posição de referência ')
text(A(1),A(2),A(3),' A')
text(B(1),B(2),B(3),' B')
text(C(1),C(2),C(3),' C')
text(D(1),D(2),D(3),' D')
axis ([-100 100 -100 100 -100 100])
grid on
subplot(2,2,2)
plot( [A(1),B(1)] , [A(2),B(2)] , 'k-o' , 'LineWidth' , 1.5 )
hold on
plot( [B(1),C(1)] , [B(2),C(2)] , 'b-o' , 'LineWidth' , 1.5 )
hold on
plot( [C(1),D(1)] , [C(2),D(2)] , 'r-o' , 'LineWidth' , 1.5 )
xlabel('x (cm)') , ylabel('y (cm)')
title ( 'plano XY ')
text(A(1),A(2),' A')
text(B(1),B(2),' B')
text(C(1),C(2),' C')
text(D(1),D(2),' D')
axis ([-100 100 -100 100 ])
grid on
subplot(2,2,3)
plot( [A(1),B(1)] , [A(3),B(3)] , 'k-o' , 'LineWidth' , 1.5 )
hold on
plot( [B(1),C(1)] , [B(3),C(3)] , 'b-o' , 'LineWidth' , 1.5 )
hold on
plot( [C(1),D(1)] , [C(3),D(3)] , 'r-o' , 'LineWidth' , 1.5 )
xlabel('x (cm)') , ylabel('z (cm)')
title ( 'plano XZ ')
text(A(1),A(3),' A')
text(B(1),B(3),' B')
text(C(1),C(3),' C')
text(D(1),D(3),' D')
axis ([-100 100 -100 100 ])
grid on
subplot(2,2,4)
plot( [-A(2),-B(2)] , [A(3),B(3)] , 'k-o' , 'LineWidth' , 1.5 )
hold on
plot( [-B(2),-C(2)] , [B(3),C(3)] , 'b-o' , 'LineWidth' , 1.5 )
hold on
plot( [-C(2),-D(2)] , [C(3),D(3)] , 'r-o' , 'LineWidth' , 1.5 )
xlabel('y (cm)') , ylabel('z (cm)')
title ( 'plano YZ ')
text(-A(2),A(3),' A')
text(-B(2),B(3),' B')
text(-C(2),C(3),' C')
text(-D(2),D(3),' D')
axis ([-100 100 -100 100 ])
grid on
M(t) = getframe();
writeVideo(video,M);
clf
end
close(video);
The problem is that the exported mp4 file shows only the last subplot. Any help would be greatly appreciated, thanks in advance!

Best Answer

Apparently by default it's getting the current axes, gca. Try getting the current figure, gcf:
thisFrame = getframe(gcf);
writeVideo(video, thisFrame);
No need to save the frame. Even if you did you'd have to use a cell array, not a regular numerical array like M, so you'd have to use braces not parentheses, but like I said there's no need to do that.