• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Matlab批量绘制图像并保存

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

author:ZKe

-------------------------------

以下是一个txt文件,每行11个字段,第一个字段是日期,后面10个是用户id和对应今天发表微博数,所有字段用制表符\'\t\'分隔

 

我们要对每一行数据,画一个柱状图,标题是日期,x轴是用户id,纵轴是发表微博数

而且是批量的,写一个Matlab脚本,绘制并保存每个图

1. 首先要处理每一行数据,进行字符串切割,假设str是我们读取的一行数据

    parts = strsplit(str, \'\t\');  % 字符串切割,返回元胞数组
    name = parts(1);  % 第一个字段是日期
    data = zeros(1,10);
    labels = cell(1,10);  % 横坐标标记
    subParts = cell(1,2);
    for i=1:length(parts)-1
        subParts = strsplit(parts{i+1}, \':\');  % 对每一个id-count字段再切割
        data(i) = str2double(subParts{2});  % 字符串转换为数值
        labels{i} = subParts{1};  % {}访问元胞数组,和原类型一样是字符串
    end

 

2. 然后通过所得数据绘制图形

    fg = figure()  % fg是可以保存的绘图句柄
    axes1 = axes(\'Parent\',fg);  % 通过axes修改横坐标标记
    bar(data, \'FaceColor\',[0.73 0.83 0.96])
    % 为柱状图添加数值标记
    for i=1:10
        text(i-0.1, data(i)+1.2, num2str(data(i)));
    end
    set(axes1,\'XTickLabel\',labels);  % 横坐标标记修改为用户ID
    xlabel(\'用户ID\')
    ylabel(\'今日发微博数\')
    % 年月日字符串作为标题
    datePart = strsplit(name{1},\'/\');
    dateStr = strcat(datePart{1},\'年\',datePart{2},\'月\',datePart{3},\'日\')
    titleName = strcat(dateStr, \' 的发微博数Top10\');
    title(titleName)

 

3. 保存图像

    saveas(fg, strcat(\'发微博数Top10/\',titleName, \'.jpg\'));
    close(fg)  % 当前图像绘制完之后关闭当前图像,否则下一个循环再打开一个画布,批量很多张的话屏幕可能会崩

 

一张就是绘制一张图像的过程,要批量进行就要按行读取文件

在以上代码的上下添加如下代码即可:

str = \'\';
fid = fopen(\'srcdata.txt\');  % 打开一个文件
index = 0;
while ~feof(fid)
    str = fgetl(fid);  % 逐行读取

    % 上述代码

end

 

效果如下!堪称Perfect!^_^ ~
不过这样其实还有一个缺陷,我忘记统一纵坐标范围了,可以用ylim()函数固定坐标范围,这样所有图像放一起就能比较差异了

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
小键盘练习程序delphi版发布时间:2022-07-18
下一篇:
我学Delphi心得及笔记----文件后缀名、工作区域介绍(第九讲)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap