Matlab批量繪制圖像並保存


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()函數固定坐標范圍,這樣所有圖像放一起就能比較差異了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM