matlab批量处理excel数据,绘图并保存

背景:数组

近期作实验须要处理大量的.dat格式数据,文件内容格式相同,生成折线图并保存图片。字体

思路:3d

1. 新建文件夹dat_in,存放待处理数据文件对象

2. 循环读取文件名,放入元胞数组blog

3. 按文件名循环处理数据,每一个文件处理流程以下图片

3.1 根据数据标识去除无效数据get

3.2 读取待处理数据,存入二维数组string

3.3 数据运算,绘图it

3.4 新建文件夹dat_image,以文件名变量命名另存图片,效果以下io

 

代码实现:

close all
clear all
clc

%———另外一种文件名加载到元胞数组方法———————————
% path = '.\dat_in\';%添加数据文件夹相对路径
% list = dir([path,'*.dat']); %读取path路径下全部dat格式文件

% filename = cell(length(list),1);%建立length(list)*1的元胞数组,即length(list)行,1列
% for ii = 1:length(list)         %将path文件夹内的全部dat格式文件的文件名放入filename()
% filename(ii) = {list(ii).name};
% end

% FN = cell2mat(filename(8));
%—————————————————————————————


%———将数据文件名添加到元胞数组,对文件夹内全部.dat文件进行数据处理——
path = '.\dat_in\';     %添加数据文件夹相对路径,文件夹在.m文件夹中
list = dir([path,'*.dat']);     %读取path路径下全部dat格式文件
fileNames={list.name};     %将数据文件名添加到元胞数组


for i = 1:length(fileNames)         %加载数据,放入矩阵data_in数组
    data_in = load(fileNames{i});      
    %———判断前k行属于无用数据———————————
    reference = data_in(:, 7);      %加载第7列数据,寻找标志位,记录标志位行数k
    for k = 1:length(reference)
        x(k) = reference(k);
        if x(k) ~= 0
            break;
        end
    end
    k = k-2;
    disp(k);
    
    %————————数据处理——————————————————————
    D = data_in(:, [2 3 5 4 7 8]);      %将2 3 5 4 7 8列数据按顺序存入矩阵D
    D(1:k,:) = [];      %去除前k行无效数据
    hmax = length(D);
    
    m1R = D(:, 1);      %电机1实际轨迹
    m2R = D(:, 2);      %电机2实际
    j5R = D(:, 3);      %关节5实际
    j6R = D(:, 4);      %关节6实际
    m1P = D(:, 5);      %电机1规划
    m2P = D(:, 6);      %电机2规划
    
    j5P = (m1P + m2P)/2;        
    j5R1 = j5R(1);
    
    j5P2 = (m1R + m2R)/2;       
    j5CE = j5P2 - j5R + j5R1;
    
    j6P = (m2P - m1P)/2;        
    j6R1 = j6R(1);
    
    j6P2 = (m2R - m1R)/2;       
    j6CE = j6P2 - j6R + j6R1;
       
    %————————出图—————————————————
    % figure1
    set(gcf,'Position',[200 200 1080 720]);     %gcf,返回Figure句柄值,[图表左下角横坐标,左下角纵坐标,宽,高],单位像素
    set(gca,'Position',[0.08 0.08 0.84 0.85]);      %图表占比,同上,相对比例
    plot(j5CE,'g','linewidth',1);       %打印曲线1,颜色green,线宽1


    ax = gca;       %坐标轴设置和原点重合
    ax.XAxisLocation = 'origin';
    ax.YAxisLocation = 'origin';


    xlabel('时间(×0.004s)','fontname','微软雅黑','fontsize',14,'FontWeight','bold','Color','r');      %横轴标签,字号,字体,颜色
    ylabel('偏差(度)','fontname','微软雅黑','fontsize',14,'FontWeight','bold','Color','r');
    % set(gca,'YTick',[-10:1:3]);       %设置y轴[起值,间隔,终值],gca,返回axis对象的句柄值
    %h = annotation('textarrow',[0.6 0.4],[0.2 0.185],'Color','r','headsize',5);        %箭头,[x起 x终][y起 y终],headsize箭头大小
    %set(h,'string','偏差最大值-8°','fontsize',12);      %箭头注释,颜色随箭头
    title([fileNames{i} '关节偏差曲线'],'fontsize',18,'fontweight','bold','fontname','微软雅黑','Color','r');
    %text(j5CEmax,0,'\leftarrow 偏差最小值');
    % legend('j5CE','fontsize',10,'FontWeight','bold','Color',[0.9 0.9 0.9]);       %颜色能够用rgb值,也能够用字母简写
    hold on;
    plot(j6CE,'r','linewidth',1);       %曲打印曲线2
    legend('j5CE','j6CE','fontsize',10,'FontWeight','bold','Color',[0.9 0.9 0.9]);      %曲线标签,颜色能够用rgb值,也能够用字母
    hold off;
    pause(2);       %图表保持显示2秒
    
    %————————存图————————————————
    mkdir dat_image;     %新建dat_image文件夹,如存在会警告,不影响程序
    filepath=pwd;           %保存当前工做目录
    cd('dat_image');        %把当前工做目录切换到指定文件夹


    % saveas(gcf,[fileNames{i} '.png']);        %存图方法一


    f = getframe(gcf);      %存图方法二
    imwrite(f.cdata,[fileNames{i} '传动偏差.png']);     %将fileNames{i} 变量写入文件名
    cd(filepath);          %返回工做目录
    
end;       %.dat文件处理for循环尾  
close;      %关闭全部图表

其余:

程序屡次执行可能会形成.dat文件乱码(通常是第二个文件),缘由未知。建议另存一份,如乱码替换后从新执行。