Matlab动态绘图、展示并保存的一种方法

如何直观地展示某个函数图像随函数中包含的某个参数的变化呢?Matlab可以!

下图直观的展示了是sin(ax)的函数图像随参数a是如何变化的。


来,直接上Matlab代码。

具体某些代码的作用,看代码后面的注释!

num = 200;% 参数a的个数,及组成GIF图的总图片个数
a_list = linspace(0.5, 5, num);% 设置参数a的取值范围
x = linspace(0, 2*pi, 200);% 设置自变量x的范围
pic_num = 1;
for i = 1:num 
    a = a_list(i);
    y = sin(a.*x);% 在一个确定的a下得到y=sin(ax)
    figure(1);
    set(figure(1), 'Color', 'white');% 设置图片窗口背景颜色为白色
    plot(x, y, 'LineWidth', 2, 'Color', [0.0118, 0.0359, 0.4824], 'DisplayName', '{\ita}='+string(roundn(a, -2)));
    % 绘制x,y曲线,并设置线宽,曲线颜色,曲线图例名称
    grid on;% 为绘图窗口加上网格
    set(gca,'FontSize',12,'FontName','Bookman Old Style');% 设置图片中字体的大小,样式
    xlabel('Label {\itx}', 'FontSize',14);% 设置x轴标签
    xlim([min(x), max(x)]);% 设置y轴标签
    ylim([-1.2, 1.2]);% 设置y轴显示范围
    ylabel('Label {\ity}', 'FontSize',14);% 设置y轴标签
    legend('FontSize',14, 'box', 'off');% 为图片加上图例
    title('GIF: {\ity}=sin({\itax})', 'FontSize',14);% 增加图片的标题
    drawnow;% 立即刷新当前绘图窗口,这是matlab绘图中动态展示的关键
   
    F = getframe(gcf);  % 获取当前绘图窗口的图片
    Im = frame2im(F);  % 返回与电影帧相关的图片数据
    [A, map] = rgb2ind(Im, 256); % 将RGB图片转化为索引图片
    if pic_num == 1
        imwrite(A, map, 'sin.gif', 'gif', 'Loopcount', Inf, 'DelayTime', 0.1);
        % 将第一张图片写入‘sin.gif’文件中,并且将GIF播放次数设置成无穷,即保存的GIF图会一直动下去
    else
        imwrite(A, map,'sin.gif','gif','WriteMode','append','DelayTime',0.1);
        % 依次将其他的图片写入到GIF文件当中
    end
    pic_num = pic_num + 1;
end

其中 imwrite 函数就是起到将循环中得到的图片依次写入到GIF格式的图片中,其中参数‘DelayTime’表示相邻两张图片播放的间隔时间,一定程度上决定了GIF动图播放时的流畅程度

代码最好电脑上查看,手机上可能会出现错行的情况!

代码看起来很长,但有很大一段是对图片的坐标,题目等属性的设置。

当然我们可以把将图片写入GIF图的过程封装成一个函数,然后把它加入到Matlab的库函数中去,这样以后使用就可以直接调用而不用再重复粘贴这一大串代码了。

如果大家实际使用中有什么问题,欢迎讨论。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容