matlab高效处理数据(读取文件,对比数据,画图)

遇到问题

目前需要批量进行数据对比并且画出图像,我有两个数据文件为A.dat和B.dat,里面有海量的数据,A文件中有位移、速度、加速度、质量、密度…,B文件中密度、速度、应变、加速度…,里面都是这些变量随时间的变化的数据,比较困难的就是这两个文件的变量顺序不一致,并且具有一些变量比如B中的“应变”是A中没有的,如果将数据逐个进行导入对比的话,繁琐且容易出错(要知道我这里的变量有上百个,只不过上边没列举出来 QAQ),所以想使用matlab弄一个能够对比的程序,避免自己手动导入对比。

解决方案

我的思路是另外编辑两个对应的Excel文件,com_A.xlsx和com_B.xlsx,里面记录着每个变量以及对应的编号,然后让matlab读取这两个Excel文件,将这两个文件作为对比规则,拿遇到的问题来说,这两个Excel文件的内容应该是这样的:
——————————————————
com_A.xlsx
变量 序号
A的位移 1
A的速度 2
A的加速度 3
A的质量 4
A的密度 5
——————————————————
com_B.xlsx
变量 序号
B的密度 5
B的速度 2
B的应变
B的加速度 3
——————————————————
只需要让程序顺序读取com_B.xlsx,并且根据序号找到com_A.xlsx的变量位置,然后将两哥曲线绘制在一个图窗中就好了。
matlab的代码如下:

clc;clear;
Data_A = load('A.dat');
Data_B = load('B.dat');
[q1,q2,Rule_A] = xlsread('com_A.xlsx');
[q1,q2,Rule_B] = xlsread('com_B.xlsx');
Time = 0:0.1:0.4;%时间作为图像横轴
num_res = 1;%记录画曲线图窗个数
figname = '';
yname = '';
[End_num,q3] = size(Rule_B);%End_num是B的行数

for i = 2:End_num%让B去匹配A
    if isnan(Rule_B{i,2}) == 0%检验B的序号是否匹配上,因为存在B有着特有变量的情况
        
        num_A = Rule_B{i,2}+1;
        yname = strcat('A:  ',Rule_A{num_A,1},'B:  ',Rule_B{i,1});%y坐标轴命名
        figname = strcat(num2str(num_res),'--',yname);%图窗标题
        
        fg = figure('numbertitle','off','name',figname);%建立图窗
        plot(Time,Data_B(:,i-1),'-ro');%绘制B曲线
        hold on;
        plot(Time,Data_A(:,Rule_B{i,2}),'-b^');%绘制A曲线,注意Rule_B{i,2}正是A数据所在变量的列数
        xlabel('time(s)');
        ylabel(yname);
        legend('B','A');
        num_res = num_res+1;
    end
end

结果展示:

matlab高效处理数据(读取文件,对比数据,画图)_第1张图片

功能总结

1、实现数据匹配对比画图的功能。
2、两个数据文件的变量个数、位置、独特性都可以不一致,比如上面的变量“应变”是B特有的情况。
3、改变读入的excel文件,就可以对比任何数据,通用性强。

你可能感兴趣的:(matlab,开发语言,图像处理)