前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab-绘制日期图

Matlab-绘制日期图

作者头像
用户9925864
发布2022-07-27 09:36:25
4100
发布2022-07-27 09:36:25
举报
文章被收录于专栏:算法工程师的学习日志

之前写过一个关于matlab绘制时间的文章(传送门:Matlab-绘制日期和持续时间图),正好有个同学问道这个问题,他是采集了手机的加速度数据进行处理,之前也有一个关于这个文章(传送门:Matlab从移动设备获取加速度数据对步数进行计数

下图是他提供的代码报错问题

看代码报错提示,出现在18行,

看变量区对应的Acceleration,

接着看提取的XYZ,可以发现对应的XYZ是一个timetable类,如果要取真实对应的数据, 还需要写明对应类下面的列,也就是x.X y.Y z.Z才是获取到真实的数据

代码修改为:

代码语言:javascript
复制
mag = sqrt(sum(x.X.^2 + y.Y.^2 + z.Z.^2));

但是结果依旧报错,为啥呢???

查看mag变成了一个1x1的数据

原因:代码中的sum求和不对,

可修改为:

代码语言:javascript
复制
mag = sqrt(x.X.^2 + y.Y.^2 + z.Z.^2);
%% 或者
mag = sqrt(sum(x.X.^2 + y.Y.^2 + z.Z.^2,2));

最后绘制图像的时候又出现了一个问题

代码语言:javascript
复制
>> plot(t,mag);
数据输入必须与坐标轴配置匹配。数值坐标轴必须具有数值数据输入,或者具有
可转换为双精度值的数据输入。

提示我们t的变量类似不对

为啥呢:

仔细看代码会发现前面plot的时候有个hold on,也就是说明后面的plot也是接着前面的xlabel,前面的xlabel未定义为timetable,从而导致了这个报错,代码最终修改为:

代码语言:javascript
复制
load('test1.mat');
t = Acceleration.Timestamp;
x = Acceleration.X;
y = Acceleration.Y;
z = Acceleration.Z;
figure
plot(x,'b')
hold on;
plot(y,'r')
hold on;
plot(z,'g')
hold off;
legend('X','Y','Z');
xlabel('Relative time (s)');
ylabel('Acceleration (m/s^2)');
x = Acceleration(:,1);
y = Acceleration(:,2);
z = Acceleration(:,3);
mag = sqrt(x.X.^2 + y.Y.^2 + z.Z.^2);
figure
plot(t,mag);

完美运行,撒花完结

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档