2017-06-18 77 views
5

我想绘制一些关于分钟的数据,而不是以Matlab的格式化时间秒,即min.sec作为格式化时间(分钟)的分钟绘图

我有收到每个样本的实时数据流,它的时间也以秒为单位发送。然后,我会根据时间绘制它们。现在,由于我的会议时间长达15分钟左右,所以我不能在时间上进行阴谋。因此我想根据时间绘制它(min.sec)。我试着将收到的时间除以60,但是这给了我100分钟而不是60分钟的分钟(0.9999而不是0.59分钟增量)。我如何转换它,以便我能够在几分钟内就时间进行绘图?

这里是我的意思是由0.99分钟而不是0.59分钟。正常分钟有60个部门没有100 enter image description here

编辑: 我试图m7913d的建议,这里是我得到了什么。

  1. 第一I相对于绘制信号以时间(秒)而不改变

  2. 的I加入datetick('x', 'mm:ss');的情节(XTICK格式并不在Matlab 2015B支持)

    蜱(A正常plot(t,v)

下面是结果enter image description here

的屏幕截图在几秒钟的时间为至多80秒s,当翻译成分钟时,它应该给我1分20秒作为最大x轴限制。但这种情况并非如此。我试图构建一个t矢量(即像t=0:seconds(3):minutes(3)),但我无法将其链接到我的秒矢量,它将随着从串口收到新样本而不断更新。 感谢

+0

编辑:阅读错误的问题。你可以请发布给你100个细分而不是60个代码吗?只需将时间向量设置为在60秒后递增:'t = 0:60:(60 * 15)'。 –

+0

我的时间向量不是由我设置的,它是从一个微控制器记录下来的,它持续发送每个样本,并以秒为单位。这就是为什么我不能设置t = 0:60:(60 * 15)。此外,持续时间最长为15分钟,但也可能较短。我目前的做法是将每次收到的时间读数除以60,但这给了我每分钟0.99分钟的增量分数(我将更新显示该图的问题) – Isra

+0

这是绘图视图---您的样本不是实际上排队与该网格(所以你的代码是正确的,但视图不是你想要的)。您只需更改'XTick'轴属性以将刻度线放在需要的位置,并且网格将与该线相符。例如。 '设置(GCA, 'XTICK',启动:增量:结束);'。 –

回答

1

您可以使用xtickformat如下指定你的X标签所需的格式:

% generate a random signal (in seconds) 
t = 0:5:15*60; 
y = rand(size(t)); 

plot(seconds(t),y) % plot your signal, making it explicit that the t is expressed in seconds 
xtickformat('mm:ss') % specify the desired format of the x labels 

请注意,我用的seconds方法,它返回一个duration对象,以指示Matlab的那t是以秒表示。

上述脚本的输出是(右侧的图像是左图像的缩放版本):

enter image description here enter image description here

预R2016b

人们可以使用datetime代替xtickformat如下:

datetimes = datetime(0,0,0,0,0,t); % convert seconds to datetime 
plot(datetimes,y) 
datetick('x', 'MM:SS'); % set the x tick format (Note that you should now use capital M and S in the format string 
xlim([min(datetimes) max(datetimes)]) 
+0

我尝试了你刚刚解释过的内容,并得到了相同的输出,而不是0.59的0.99分区。我的时间来自串口,而不是像(t = 0:5:15 * 60;)那样设置。每秒钟,我有250个采样(250Hz采样频率)。 – Isra

+0

你是否收到错误信息?提供[mcve]以显示与我的代码的区别可能很有用。 – m7913d

+0

我已经编辑了所有你问的问题 – Isra