Matlab-绘制日期图

2022-07-27 09:36:25 浏览数 (1)

之前写过一个关于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);

完美运行,撒花完结

0 人点赞