用MATLAB绘制动图并保存gif格式
参考链接
https://www.zhihu.com/question/303355108
MATLAB绘制动图
举个栗子,绘制200万张彩票内200张中奖彩票,买多少张会中奖的概率,从1开始算概率,动图实现。
直接上代码:
fig = figure;
h = animatedline('linewidth',1,'Color','b', 'Marker','*','markersize',3,'MarkerEdgeColor','r');
n1=200000;%2e5;%总共彩票张数
n2=200;%200;%中奖张数
num1=50;%横轴间隔1
n_mid=6000;
num2=500;%横轴间隔2
n_num=n1/num1;%横轴点数1
n_num1=n_mid/num1;%横轴点数1
n_num2=n_num1+(n1-n_mid)/num2;%横轴点数2
y0=zeros(n1,1);
y0(1)=1;
y=zeros(n_num2,1);
y(1)=0;
x=linspace(1,n_num2,n_num2);%
k=0;
for m=1:1:n_num
if m<=n_mid/num1
k=k+1;
for i=1:m*num1
y0(i+1)=y0(i)*(n1-n2-m+1)/(n1-m+1);
end
y(k)=1-y0(m*num1);
x(k)=m*num1;
elseif (m>n_mid/num1) && (mod((m*num1-n_mid),num2)==0)
k=k+1;
for i=1:m*num1
y0(i+1)=y0(i)*(n1-n2-m+1)/(n1-m+1);
end
y(k)=1-y0(m*num1);
x(k)=m*num1;
end
%temp=[temp(2) i];
%plotx=10*[temp(m-1) temp(m)];
%ploty=[p(m-1) p(m)];
%plot(plotx,ploty,'*','linewidth',1,'markersize',6)%'markersize',6
%hold on
%pause(0.05)
end
im = cell(1, length(x));
for j = 1:length(x)
addpoints(h, x(j), y(j));
xlim([0,n1*0.03]);
ylim([0,1]);
drawnow
get(gca,'xtick'); % 得到坐标的实际大小
set(gca,'xticklabel',get(gca,'xtick')); % 将x显示的字符替换为实际大小
% 注释下面两句话可以看到动态输出
frame = getframe(fig);
im{j} = frame2im(frame);
end
下面是保存gif图片代码:
% 下面是保存成 gif
filename = 'test2.gif';
title('中奖概率')
%xabel('抽的张数')
%ylabel('中奖概率')
for idx = 1:length(x)
% 制作gif文件,图像必须是index索引图像
[A, map] = rgb2ind(im{idx}, 256);
if idx == 1
imwrite(A, map, filename, 'gif', 'LoopCount', Inf, 'DelayTime', 0.002);%0.002
else
imwrite(A, map, filename, 'gif', 'WriteMode', 'append', 'DelayTime', 0.002);
end
end
最终结果: