赞
踩
假如我们有这样一组多站位数据:
数据中列出了各个监测站位中不同物种的数量。
现需统计各个站位所有物种的数量之和,该如何操作?
很多人选择直接用Excel的求和函数sum,一个站位一个站位地进行计算,效率极低。
其实像这种有规律可循的工作,都可以通过编程实现。
本期利用Matlab的‘unique’函数来解决这一问题,并通过绘制单组多色柱状图以可视化验证结果的准确性:
特别提示:如果你也有好的效率提升方法,欢迎评论区分享~
1.读取数据
通过‘readtable’命令读取excel表格数据:
data = readtable('D:\底栖动物\2014_底栖动物.xlsx', ...
'VariableNamingRule','preserve');
B = data.("监测站位");
C = data.("个体数");
2.统计各站位个体总数
利用‘unique’函数提取监测站位数据B中的非重复项ia,以及所有监测站位类别标签ic:
[ia,~,ic] = unique(B);
其中,B(:) = ia(ic)。将ic数据粘贴到原始数据中可能更好理解:
然后,只需要通过for循环计算某一类别标签所对应的个体数并求和即可:
for i = 1:length(ia)
num = C(find(ic==i),1);
sumnum(1,i) = sum(num);
end
完整代码如下:
%% 读取数据
data = readtable('D:\底栖动物\2014_底栖动物.xlsx', ...
'VariableNamingRule','preserve');
B = data.("监测站位");
C = data.("个体数");
%% 统计各站位个体总数
[ia,~,ic] = unique(B);
sumnum = zeros(1,length(ia));
for i = 1:length(ia)
num = C(find(ic==i),1);
sumnum(1,i) = sum(num);
end
%% 各站位个体总数可视化
% 颜色定义
map = TheColor('sci',511);
% 图片尺寸设置(单位:厘米)
figureUnits = 'centimeters';
figureWidth = 20;
figureHeight = 10;
% 窗口设置
figureHandle = figure('Color','w');
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);
% 绘制单组多色柱状图
x = 1:length(ia);
GO = bar(x,sumnum,0.7);
hYLabel = ylabel('各站位个体总数');
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], ...
'xtick',x,...
'xticklabel',ia,...
'YScale','log')
% 图片输出
figW = figureWidth;
figH = figureHeight;
set(figureHandle,'PaperUnits',figureUnits);
set(figureHandle,'PaperPosition',[0 0 figW figH]);
fileout = 'test';
print(figureHandle,[fileout,'.png'],'-r300','-dpng');
Matlab单组多色柱状图绘制方法详见《Matlab论文插图绘制模板—柱状图(单组多色)》,结果如图所示:
以上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。