其中一个绘图轴上的刻度标签如何在MATLAB中相乘?

时间:2014-12-03 15:13:57

标签: matlab plot

我目前正试图在我的Matlab中绘制'漂亮的'轴。这些值是每20ms采样一次的样本。所以在X轴上,我想在ms中有时间。我绘制数据的一般代码非常简单:

plot(1:size( data.matrix,1), data.matrix(:,1),'b');

到目前为止,我已经能够在此轴上正确显示样本编号: 代码:

set(gca,'XTick',(1:size(data.matrix,1))*20);

结果(a):

enter image description here

在给定的示例中,样本数等于184,这使得:

time = 184 * 20ms = 3680ms

因为更改XTick值没有做太多改变,所以我测试了XTickLabel属性:

代码:

set(gca,'XTickLabel',ceil(linspace(0,size(data.matrix,1)*20,10)));

结果(b):

enter image description here

代码:

set(gca,'XTickLabel',0:ceil((size(data.matrix,1)*20)/10):size(data.matrix,1)*20);

结果(c):

enter image description here

正如您所看到的,结果并不是最糟糕的结果。但这不是我想要实现的目标。我的目标是拥有这样的价值观:

enter image description here

所以它只是首先绘制(结果a)X轴乘以20。

有人可以告诉我如何实现这个目标吗?

2 个答案:

答案 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);