MATLAB多级分组绘图及图例等细节处理 ; MATLAB画图横轴时间纵轴数值按照不同sensorCode分组画不同sensorCode的曲线

平时研究需要大量的绘图Excel有时候又臃肿且麻烦

尤其是当处理大量数据时可能会拖死Windows

示例代码及数据量展示

因为数据量是万级别的折线图也变成"柱状图"了, 不过还能看出大致趋势! 横轴是时间纵轴是传感器数值图例是传感器所在深度

MATLAB 复制代码
% data = readtable('C:\Users\sdgs\滨大近一个月数据.xlsx')

% 获取所有的depth值
sensorCodes = unique(data.depth);

% 获取所有的时间戳
timestamps = unique(data.id);

% 创建一个图形
figure;
hold on;

% 遍历每个depth
for i = 1:length(sensorCodes)
    code = sensorCodes(i);
    % 创建一个过滤器,只选择当前depth的数据
    filter = data.depth == code;
    
    % 获取当前depth的数据
    codeData = data(filter, :);
    
    % 创建一个向量来存储当前depth的humidity
    humidityValues = zeros(1, length(timestamps));
    
    % 遍历每个时间戳
    for j = 1:length(timestamps)
        timestamp = timestamps(j);
        % 在当前时间戳上获取对应的humidity值
        filter = codeData.id == timestamp;
        humidity = codeData(filter, :).humidity;
        
        % 如果有对应的humidity值,则保存到humidityValues中
        if ~isempty(humidity)
            humidityValues(j) = humidity;
        end
    end
    
    % 绘制曲线
    plot(timestamps, humidityValues, 'DisplayName', ['depth: ' num2str(code)]);
end

xlabel('时间');
ylabel('数值');
legend('show');
title('不同depth的曲线图');

hold off;

代码中都有注释, 可以直接执行也可以往下看

画图横轴时间纵轴数值按照不同sensorCode分组画不同sensorCode的曲线

思路大致就是两次for循环的遍历, 因为要目标值还要进行分组

第一次遍历是要分的组就是代码中的depth ,第二次遍历就是拿到这个depth在对应时间的值

在一开始我们遍历了Excel中的数据, 应该叫读取了更加合适

然后取出相关的值并用unique进行去重

接着就是卡住的地方

用到了过滤器的概念, 对数据过滤后拿过滤玩的数据获取目标值, 然后初始化一个向量长度设置和X轴一致, 这样可以避免越界异常

复制代码
下标索引必须为正整数类型或逻辑类型。

出错 table/dotParenReference (line 82)
        b = b(rowIndices);

出错 plotLine (line 19)
        time = data.id(idx);

然后开始根据depth, 遍历时间戳如果有值就塞到中间变量中

总结: 外部循环遍历depth内部循环根据时间戳遍历值并用变量做存储!

等到值都有变量存了就可以拿变量进行绘图了

这一步往往会遇到类型的问题,因为plot只能绘制数字类型, 如果数据中有字母活其他字符 , MATLAB会给这个数据加上引号或者其他修饰这样绘图时就会有报错

细节

生成的默认的图例很难分辨, 这时候就要在结果上做文章了

1-设置图例的样子

  • plot(x, y1, '-rO'):绘制以 x 为横轴,y1 为纵轴的曲线,线型为实线('-'),颜色为红色('r'),标记为圆圈('O')。
  • plot(x, y2, '-kX'):绘制以 x 为横轴,y2 为纵轴的曲线,线型为实线('-'),颜色为黑色('k'),标记为叉号('X')。
  • plot(x, y3, ':b*'):绘制以 x 为横轴,y3 为纵轴的曲线,线型为点线(':'),颜色为蓝色('b'),标记为星号('*')。

2-设置背景色比较懒就都用上面这一个图了

set(lg1,'TextColor','red','Color','yellow');

相关推荐
疯狂的挖掘机7 分钟前
记一次基于QT的图片操作处理优化思路(包括在图上放大缩小,截图,画线,取值等)
开发语言·数据库·qt
cnxy18812 分钟前
围棋对弈Python程序开发完整指南:步骤4 - 提子逻辑和劫争规则实现
开发语言·python·机器学习
意趣新29 分钟前
C 语言源文件从编写完成到最终生成可执行文件的完整、详细过程
c语言·开发语言
李艺为1 小时前
根据apk包名动态修改Android品牌与型号
android·开发语言
黄河滴滴2 小时前
java系统变卡变慢的原因是什么?从oom的角度分析
java·开发语言
老华带你飞2 小时前
农产品销售管理|基于java + vue农产品销售管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
superman超哥2 小时前
Rust Workspace 多项目管理:单体仓库的优雅组织
开发语言·rust·多项目管理·rust workspace·单体仓库
kylezhao20192 小时前
C#通过HSLCommunication库操作PLC用法
开发语言·c#
JIngJaneIL3 小时前
基于springboot + vue房屋租赁管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
期待のcode4 小时前
Java的抽象类和接口
java·开发语言