当前位置:   article > 正文

Matlab如何高效统计多站数据中各站目标总数?用Unique函数!科研效率UpUp第2期

Matlab如何高效统计多站数据中各站目标总数?用Unique函数!科研效率UpUp第2期

假如我们有这样一组多站位数据

数据中列出了各个监测站位中不同物种的数量

现需统计各个站位所有物种的数量之和,该如何操作?

很多人选择直接用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,:);endset(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论文插图绘制模板—柱状图(单组多色)》,结果如图所示:

以上。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/181418
推荐阅读
相关标签
  

闽ICP备14008679号