Matlab-绘制日期图

182 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 12 天,点击查看活动详情

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

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

图片

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

看变量区对应的Acceleration,

图片

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

图片

代码修改为:

mag = sqrt(sum(x.X.^2 + y.Y.^2 + z.Z.^2));

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

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

图片

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

可修改为:

mag = sqrt(x.X.^2 + y.Y.^2 + z.Z.^2);%% 或者mag = sqrt(sum(x.X.^2 + y.Y.^2 + z.Z.^2,2));

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

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

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

为啥呢:

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

load('test1.mat');t = Acceleration.Timestamp;x = Acceleration.X;y = Acceleration.Y;z = Acceleration.Z;figureplot(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);figureplot(t,mag);

图片

完美运行,撒花完结图片图片