Origin数据扣背底-matlab快速操作
问题来源
因为WAXS数据通过Fit2D软件处理得到样品和背底的一维积分数据,存在origin里面,要想扣背底需要在origin内逐列操作,这是麻烦的,所以想到用matlab处理庞大的矩阵。
代码
clear
close all
n = input('ctrl+A全选表格,请输入数据原文件的行数:');
m = input('请输入数据原文件的列数-字母组合:'); % 示例:'AA'
m1 = getColumnNumber(m);
A = zeros(n, m1);%预存原数据
replay = input('-------*****将origin的原始数据全部复制到A中,操作完成后,输入任意数继续*****-------:');
B = zeros(n, m1);%预存背底数据
replay = input('-------*****将origin的背底数据全部复制到B中,操作完成后,输入任意数继续*****-------:');
x1 = A(:,1); %第一列
g = 1; %扣背底数据的倍数
Z = A - g*B;
Z(:, all(Z==0)) = []; %删除全0列
p = size(Z,2); %可以得到列数n
Z1 = [x1,Z];
save('test.mat','Z1')
%save('test.mat','Z1','Z')
figure %预览图
for j = 1:p
plot(x1,Z(:,j),'LineWidth',1.5);
hold on
end
disp("-------*****打开Z1,Z1即为扣完背底的数据,将Z1的全部数据全部复制到origin中或者File->Import->Matlab(Mat),即可绘图*****-------");
//根据origin/Excel的列标号(字母)求列数的子函数
function columnNumber = getColumnNumber(columnLabel)
% 将列标号的字母转换为大写形式,eg.columnLabel='AA'/'aa'
columnLabel = upper(columnLabel);
% 计算列标号对应的列数
columnNumber = 0;
for i = 1:length(columnLabel)
columnNumber = columnNumber * 26 + (columnLabel(i) - 'A' + 1);
end
end
上面即为我所编写的交互代码,比较粗陋,仅供参考。
使用说明
1、知道数据矩阵的行数,列标号
2、复制样品数据到A矩阵,点击继续,并输入任意数字继续
3、复制背底数据到B矩阵,点击继续,并输入任意数字继续
4、g为背底系数,可在程序内修改
5、保存了带有角度数据和扣完背底的数据Z1在test,mat中,将Z1的全部数据全部复制到origin中或者File->Import->Matlab(Mat)导入test.mat即可绘图
示例图片
matlab图片:
origin图片:
加油!各位!