zoukankan      html  css  js  c++  java
  • Matlab批量绘制图像并保存

    author:ZKe

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

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

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

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

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

        parts = strsplit(str, '	');  % 字符串切割,返回元胞数组
        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()函数固定坐标范围,这样所有图像放一起就能比较差异了

  • 相关阅读:
    这个网站的设计太独特了
    mybatis—— 一个空格引发的血案
    Java IO--实现文件的加密解密
    Intellij IDEA如何生成JavaDoc--转载
    Java 在循环里发生异常会跳出循环
    idea格式化代码快捷键
    idea创建类时默认添加头部注释信息
    maven-helper解决依赖冲突
    Octotree插件
    idea .gitignore(git文件忽略)
  • 原文地址:https://www.cnblogs.com/zhaoke271828/p/13212383.html
Copyright © 2011-2022 走看看