【MATLAB】用MATLAB绘制动图并保存gif格式

用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

最终结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值