我目前正试图在我的Matlab中绘制'漂亮的'轴。这些值是每20ms采样一次的样本。所以在X轴上,我想在ms中有时间。我绘制数据的一般代码非常简单:
plot(1:size( data.matrix,1), data.matrix(:,1),'b');
到目前为止,我已经能够在此轴上正确显示样本编号: 代码:
set(gca,'XTick',(1:size(data.matrix,1))*20);
结果(a):
在给定的示例中,样本数等于184,这使得:
time = 184 * 20ms = 3680ms
因为更改XTick值没有做太多改变,所以我测试了XTickLabel属性:
代码:
set(gca,'XTickLabel',ceil(linspace(0,size(data.matrix,1)*20,10)));
结果(b):
代码:
set(gca,'XTickLabel',0:ceil((size(data.matrix,1)*20)/10):size(data.matrix,1)*20);
结果(c):
正如您所看到的,结果并不是最糟糕的结果。但这不是我想要实现的目标。我的目标是拥有这样的价值观:
所以它只是首先绘制(结果a)X轴乘以20。
有人可以告诉我如何实现这个目标吗?
答案 0 :(得分:2)
使用时:
plot(1:size( data.matrix,1), data.matrix(:,1),'b');
第一个参数1:size( data.matrix,1)
创建一个表示数据点索引的连续整数的向量。有两件事是错的:
1)您无需指定它。仅使用plot
数据调用的Matlab Y
函数将自动创建此向量并使用它来绘制数据。
2)这些索引代表数据在数组中的位置,它们没有物理意义(例如"时间"适用于您的情况)。
解决方案是创造一个适当的时间'向量并将其作为绘图函数的第一个参数发送。这样Matlab将负责滴答管理,你不必使用手动xtick设置来调整。
在下面的示例中查看两种方法,一切都将清晰:
%// build a simple index "X" vector (as you were doing)
x_index = 1:size(data.matrix,1) ;
%// build a properly scaled time vector
timeInterval = 20 ; % in milliseconds
x_time = ( 0:size(data.matrix,1)-1 ) * timeInterval ;
plot( x_index , data.matrix(:,1) ) %// this will do like in your example
plot( x_time , data.matrix(:,1) ) %// this will do what you want
答案 1 :(得分:1)
你能做到吗?
set(gca,'XTickLabel',(1:size(data.matrix,1))*20*20);