当前位置: 首页 > news >正文

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

平时研究需要大量的绘图Excel有时候又臃肿且麻烦
尤其是当处理大量数据时可能会拖死Windows

示例代码及数据量展示
在这里插入图片描述
在这里插入图片描述
因为数据量是万级别的折线图也变成"柱状图"了, 不过还能看出大致趋势! 横轴是时间纵轴是传感器数值图例是传感器所在深度

% 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的humidityhumidityValues = 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;endend% 绘制曲线plot(timestamps, humidityValues, 'DisplayName', ['depth: ' num2str(code)]);
endxlabel('时间');
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’);

http://www.lryc.cn/news/332534.html

相关文章:

  • 20240405,数据类型,运算符,程序流程结构
  • Prometheus+grafana环境搭建Nginx(docker+二进制两种方式安装)(六)
  • 贝叶斯逻辑回归
  • Win10 下 Vision Mamba(Vim-main)的环境配置(libcuda.so文件无法找到,windows系统运行失败)
  • 4 万字全面掌握数据库、数据仓库、数据集市、数据湖、数据中台
  • Leetcode 64. 最小路径和
  • FANUC机器人故障诊断—报警代码更新(三)
  • mysql 本地电脑服务部署
  • 爬虫学习第一天
  • labview如何创建2D多曲线XY图和3D图
  • 【华为OD机试】芯片资源限制(贪心算法—JavaPythonC++JS实现)
  • 服务器硬件构成与性能要点:CPU、内存、硬盘、RAID、网络接口卡等关键组件的基础知识总结
  • STC89C51学习笔记(四)
  • Arcgis Pro地理配准
  • 数字转型新动力,开源创新赋能数字经济高质量发展
  • 解决JavaWeb中IDEA2023新版本无法创建Servlet的问题
  • 关于oracle切换mysql8总结
  • Docker 容器编排技术解析与实践
  • 微信小程序 ---- 慕尚花坊 订单列表
  • Tuxera2023 NTFS for Mac下载,安装和序列号激活
  • 移动Web学习04-移动端订单结算页PC端个人中心页面
  • Linux基础篇:Linux网络yum源——以配置阿里云yum源为例
  • 2024.2.10力扣每日一题——二叉树的中序遍历
  • MVP惊现神秘买家,或疑为华尔街传奇投资人?
  • 观察者模式 C++
  • 每日一题 --- 删除字符串中的所有相邻重复项[力扣][Go]
  • 前端三剑客 —— CSS (第四节)
  • Linux文件IO(3):使用文件IO进行文件的打开、关闭、读写、定位等相关操作
  • Vite 项目中环境变量的配置和使用
  • C++读取.bin二进制文件