对于时间序列图,如何将x轴设置为没有周末的日历时间

问题描述 投票:2回答:1

我想绘制一个时间序列(外汇期货合约的定价数据)。时间以yyyymmdd HH:MM:SS字符串格式给出。价格在double中。

时间序列跨越一周。但是,数据点的时间戳总是在工作日。 是否有内置方法显示适当的X轴标签和缩放比例,但没有周末?

我目前可以通过将字符串中的时间戳转换为datenum并使用datenum自动排列x轴来显示时间序列。但是我想知道如何在X轴上排除周末。或从没有数据的网格中排除任何延长的时间间隔。

有关视觉效果,请参见最后的示例。如果由于包括周末(4月10日是美国的假期)而可以排除较大的空白区域,则可以通过关注实际数据的位置来使该图变得更清晰。

数据点本身仅适用于工作日。但是在datetickdatetick之间,只要时间序列跨越一周,就会在周末创建网格点。 plot很有用,因为它可以检测到x轴网格的适当缩放比例,并一次性应用相应的网格标签。如果您认为datetick是解决方案的一部分,那么使用datetick之后是否可以删除特定的网格点?

示例:

datetick

[如果您有兴趣修改相同的图,请通过c&p将数据从datetick检索到Matlab cmd中。上面相同的线将产生以下图。

T=[7.378903958333334e+05;7.378967076388889e+05]; % converted from "20200409 09:30:00" and "20200415 16:59:00" C=[0.7166;0.7090]; grid on plot(T,C,'.') xlim([min(T),max(T)]) datetick

matlab matlab-figure
1个回答
1
投票

没有此类功能。可能是因为这实际上使x轴不连续,这(通常)是不希望的。

您将必须创建一个合成的X轴,以通过整理周末(或者不是工作日)来实现此目的。这是标准图(工作日为蓝色)

pastebin

现在让我们摆脱其他日子,手动设置Example

% create data
T = 7.3789e+05+(0:5:100)/10.';
C = rand(size(T)); 

% is a busniess day?
lg = isbusday(T);

% standard date plot
plot(T(lg),C(lg),'o', T(~lg),C(~lg),'o')
datetick('x','ddd')

查看结果:左侧为标准版本,右侧为带有手动设置刻度标签的版本。xTickLabel

© www.soinside.com 2019 - 2024. All rights reserved.