上一篇文章中,讲了如何批量统计一组Excel数据中多个站位所有物种的数量之和(Matlab如何高效统计多站数据中各站目标总数?科研效率UpUp第2期)。
进一步,假如我们有多组Excel数据,也就是多个Excel表格,该怎么操作呢?
本期结合第1期内容(Matlab如何批量读取txt数据?科研效率UpUp第1期),分享一下如何通过Matlab批量读取Excel数据、统计多个站位所有物种的数量之和并将其可视化:
值得一提的是,本期的重点在于批量读取Excel数据,统计多个站位所有物种的数量之和、可视化仅为读取数据后的一种应用。
特别提示:如果你也有好的效率提升方法,欢迎评论区分享~
1.数据格式
数据格式如图所示:
2.批量读取并可视化
通过‘dir’命令列出所需路径下所有xlsx文件:
file_read=dir('D:\底栖动物\*.xlsx');
利用‘readtable’命令读取数据:
currentFname = strcat('D:\底栖动物\',filenames{ii});
data = readtable(currentFname,'VariableNamingRule','preserve');
按照第2期内容统计多个站位所有物种的数量之和,通过‘bar’绘制单组多色柱状图:
GO = bar(x,sumnum,0.7);
3.完整代码
完整代码如下:
%% 列出文件夹对应内容
file_read=dir('D:\底栖动物\*.xlsx');
filenames={file_read.name}';
file_length=length(file_read);
%% 批量读取、统计各站位个体总数并可视化数据
% 颜色定义
map = TheColor('sci',511);
% 图片尺寸设置(单位:厘米)
figureUnits = 'centimeters';
figureWidth = 20;
figureHeight = 16;
% 窗口设置
figureHandle = figure('Color','w');
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);
% 绘制
t = tiledlayout(3,3);
for ii = 1:file_length
% 读取
currentFname = strcat('D:\底栖动物\',filenames{ii});
data = readtable(currentFname,'VariableNamingRule','preserve');
B = data.("监测站位");
C = data.("个体数");
% 统计各站位个体总数
[ia,ib,ic] = unique(B);
sumnum = [];
for i = 1:length(ia)
num = C(find(ic==i),1);
sumnum(i) = sum(num);
end
% 可视化
nexttile(ii)
x = 1:length(ia);
GO = bar(x,sumnum,0.7);
hTitle = title(filenames{ii}(1:4));
GO.FaceColor = 'flat';
for i = 1:length(ia)
GO.CData(i,:) = map(i,:);
end
set(gca, 'box','off',...
'LineWidth',1,...
'XGrid', 'off', 'YGrid', 'on', ...
'TickDir', 'out', 'TickLength', [.015 .015], ...
'YScale','log')
end
t.TileSpacing = 'compact';
t.Padding = 'compact';
%% 图片输出
figW = figureWidth;
figH = figureHeight;
set(figureHandle,'PaperUnits',figureUnits);
set(figureHandle,'PaperPosition',[0 0 figW figH]);
fileout = 'test';
print(figureHandle,[fileout,'.png'],'-r300','-dpng');
以上。