在寫論文的過程中,我們經常需要用MATLAB繪制圖形。論文中的圖形都是圖檔格式,但是在展示和彙報時,如果将圖形做成GIF動圖,變量的變化過程就會非常直覺,展示效果也會非常好。下面将本人利用MATLAB繪制GIF動圖的方法分享給大家。
- 前提:已經利用MATLAB完成了圖檔的繪制,儲存有變量資料
具體程式如下所示:
figure(1)
clf;
box on;
%坐标軸資訊
xlabel({'時間(s)'},'FontSize',40)
ylabel({'$z_{i1}(t)$'},'Interpreter','latex','FontSize',40)
%設定坐标軸線寬
set(gca,'LineWidth',2,'FontSize',40)
%坐标顯示範圍
axis([0,1.5,-50,100])
legend('智能體1','智能體2','智能體3','智能體4','智能體5','智能體6','智能體7','智能體8');
pausetime=0.001; %設定繪圖速度
pause(1);
%繪制八條曲線,設定每條曲線的顔色和線寬
h1=line(NaN,NaN,'color','r','linewidth',2.5);
h2=line(NaN,NaN,'color','b','linewidth',2.5);
h3=line(NaN,NaN,'color','k','linewidth',2.5);
h4=line(NaN,NaN,'color','g','linewidth',2.5);
h5=line(NaN,NaN,'color','r','linewidth',2.5);
h6=line(NaN,NaN,'color','g','linewidth',2.5);
h7=line(NaN,NaN,'color','b','linewidth',2.5);
h8=line(NaN,NaN,'color','k','linewidth',2.5);
t=1*(0.001:0.001:1.5);
%直接用n=1:length(t),繪制速度超級慢;n=1:20:length(t) ,中間的20表示多久取一次樣,可以調節繪制速度
for n=1:20:length(t)
%z1,z2,...,z8是之前MATLAB繪圖時,儲存的變量,也就是前提條件中的繪制圖形儲存的變量
set(h1,'xdata',t(1:n),'ydata',z1(1,1:n));%設定質點1的運動
set(h2,'xdata',t(1:n),'ydata',z2(1,1:n));%設定質點2的運動
set(h3,'xdata',t(1:n),'ydata',z3(1,1:n));%設定質點3的運動
set(h4,'xdata',t(1:n),'ydata',z4(1,1:n));%設定質點4的運動
set(h5,'xdata',t(1:n),'ydata',z5(1,1:n));%設定質點5的運動
set(h6,'xdata',t(1:n),'ydata',z6(1,1:n));%設定質點6的運動
set(h7,'xdata',t(1:n),'ydata',z7(1,1:n));%設定質點7的運動
set(h8,'xdata',t(1:n),'ydata',z8(1,1:n));%設定質點8的運動
pause(pausetime);
legend('智能體1','智能體2','智能體3','智能體4','智能體5','智能體6','智能體7','智能體8');
drawnow;
%下面是儲存為GIF的程式
frame=getframe(gcf);
imind=frame2im(frame);
[imind,cm] = rgb2ind(imind,256);
if n==1
imwrite(imind,cm,'Z1.gif','gif', 'Loopcount',inf,'DelayTime',1e-4);
else
imwrite(imind,cm,'Z1.gif','gif','WriteMode','append','DelayTime',0);
end
end
GIF繪制效果如下所示: