MATALB学习之旅

实际问题

在用MATLAB进行数据可视化时,会对大量数据进行处理与分析,有时需要把多个事件数据绘在同一个图上,并且每个事件中的数据需要进行处理:比如插值法,平滑曲线等等,然后求出平均曲线,因为大量数据下的单一曲线汇总往往很难看出什么结果,故而对平均曲线的绘制更为重要。

MATLAB代码分析

多个事件绘制在同一个图上一般使用循环,但需要正确抽取数据。

% 读取的数据可能维度不一,可以进行变化
% 比如
a=all_X.'; % 行列交换
a=a(:); %换成一列

% 绘图
figure;
for i=1:length(single_day)
    % 正确提取数据
    
    plot(x,y,'color',[0.5 0.5 0.5],'LineWidth',0.5);
    % 因数据冗杂,往往需要统一格式并且不突出显示
    hold on;
end

首先进行简单绘图操作,在确定数据无异常,出图效果与预期相似再继续进行处理,防止后期处理遗失数据与信息。

在实际情况下:由于多种影响因素,可能出现每条曲线的起始点与终止点不同,即汇总图中是无规则的,并且单一的曲线上,可以y值的数据会出现nan值的情况,并且出现的位置与个数可多可少,也无规律;虽然会有人进行函数编辑,使用者了解如何使用即可画出所需图形,但适用条件不一定符合自己的所需,因此可以尝试按所需编辑逻辑并出图

字典,可以查找到某个字或词等的含义、适用场景等等;绘制该平均曲线,与查字典的逻辑过程类似,不确定因素多,但是可以确定每个x值所包含的所有y值,所以可以根据x的索引找到对应的所以y值,从而求出平均y值。

% 非实际应用场景,需要进行修改
t=max(x)-min(x); % 计算x索引所需的最大值
average_y=cell(1,t); % 创建空字典
for i=1:length(single_day)
    % 定位所需提取的数据,这里假设与length(single_day)有关
    start_index=(i-1)*200;
    end_index=i*200;

    % 开始提取,这里假设汇总数据为zero_x,zero_y
    single_batch_x=zero_x(start_index:end_index); 
    single_batch_y=zero_y(start_index:end_index);
    
    % 进行插值平滑处理等
    %......
    % 如果不知道具体怎么使用,可以doc soomth;doc interp1

    % 提前指定的x和y,如果需要进一步统一研究的范围,即对于范围内的进行绘图,范围外略去
    region_ind=(single_batch_x>=-100 & single_batch_x<=100);
    region_x=single_batch_x(region_ind);
    region_v=single_batch_y(region_ind);

    for j = 1:length(region_x)
        % 数组是从1开始索引的,一般需要安装实际情况开始创建字典,这里假设满足上文从-100开始有值
        x_index=region_x(i)-(-100)+1;
        % 从-100开始一一对应放入所以的y值
        average_y{x_index}=[average_y{x_index},region_v(i)];
    end
end
    
% 求平均值,上文选用了-100到100范围,故创建的大小需要对应上文
average_y_k=zeros(1,201);
for i=1:length(average_y_k)
    average_y_k(i)=mean(average_y{i},'omitnan');  % 除去nan值进行平均
end

% 因为数据上一一对应,处理后可以绘图
% 假设汇总图已经绘制上
avg_y=smooth(average_y_k,'movmean',2); % 对平均曲线进行平滑处理
hold on;
x_values=-100:100; % 这里按照上文的范围进行确定化,实际情况需要进行修改等
plot(x_values,avg_y);

如果数据之后也是这种情况,那么就可以简单修改后快速出自己对应情况的结果,一般短时间的研究数据应该不会更换,出发学习的方向与内容更换吧,还是试着自己编写效果方便后续学习。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值