欢迎光临散文网 会员登陆 & 注册

【有用建议收藏】用MATLAB生成好看的gif图

2020-01-03 20:51 作者:不妙脆角  | 我要投稿

之前做了个matlab制作gif的视频,现在把代码写一下,便于大家复制。

大概就是这种效果:

二维正态函数

生成gif图部分:

%By HDTT%

f_num=1;%帧数索引

%画图部分%

for rho=0:0.02:0.9%选取的动态参数

    normal_2d(0,0,rho);%自定义画图函数。要包含能画出图的函数%

%加标注%

    xlabel x;ylabel y;zlabel z;

    title([num2str((rho))]);

    

    F=getframe(gcf);%截取帧

    I=frame2im(F);%从单个影片帧 F 返回真彩色 (RGB) 图像。

    

    [I,map]=rgb2ind(I,256);%使用具有256种量化颜色的最小方差量化法并加入抖动

                            %将 RGB 图像转换为索引图像I,关联颜色图为map。

    

    if f_num == 1%如果不存在该图片,则创建

        imwrite(I,map,'normal2d.gif','gif', 'Loopcount',inf,'DelayTime',0.1);

    else%如果已经存在该图片,则添加

        imwrite(I,map,'normal2d.gif','gif','WriteMode','append','DelayTime',0.1);

    end

    f_num=f_num+1;%帧数索引+1

end 


内置的二维正态函数部分:

function [ p ] = normal_2d( mu_x,mu_y, rho )

close all;

mu=[mu_x,mu_y];% 均值向量

Sigma=[1 rho;rho 1];% 协方差矩阵

[X,Y]=meshgrid(-3:0.1:3,-3:0.1:3);%在XOY面上,产生网格数据

p=mvnpdf([X(:) Y(:)],mu,Sigma);%求取联合概率密度,相当于Z轴

p=reshape(p,size(X));%将Z值对应到相应的坐标上


figure

set(gcf,'Position',get(gcf,'Position').*[1 1 1.3 1])


subplot(2,3,[1 2 4 5])

surf(X,Y,p),axis tight,title('二维正态分布图')

zlim([0 0.4])

subplot(2,3,3)

surf(X,Y,p),view(2),axis tight,title('在XOY面上的投影')

subplot(2,3,6)

surf(X,Y,p),view([0 0]),axis tight,title('在XOZ面上的投影')


最后再附上生成视频的代码:


以及一些画图的小trick:


你知道怎么把这三张图像下图一样排布吗?


【有用建议收藏】用MATLAB生成好看的gif图的评论 (共 条)

分享到微博请遵守国家法律