Date Matlab或倍频程图在x轴上自动生成日期

Date Matlab或倍频程图在x轴上自动生成日期,date,plot,octave,Date,Plot,Octave,我有几百个整数测量。它们每天服用。我知道第一次测量是在2019年3月3日进行的。我没有任何与每次测量明确相关的日期。我想在y轴上绘制这些值,在x轴上绘制连续日期。我还想绘制这些测量的子集。例如,从2019年6月6日到2019年11月11日,最好只提供初始开始日期和两个子集日期。您可以创建日期时间向量,并将其用作x轴。查看MATLAB中的 要创建时间向量,只需在初始日期中添加持续时间(以小时为单位) % number of samples/data/dates NumSmpl = 100; Dat

我有几百个整数测量。它们每天服用。我知道第一次测量是在2019年3月3日进行的。我没有任何与每次测量明确相关的日期。我想在y轴上绘制这些值,在x轴上绘制连续日期。我还想绘制这些测量的子集。例如,从2019年6月6日到2019年11月11日,最好只提供初始开始日期和两个子集日期。

您可以创建日期时间向量,并将其用作x轴。查看MATLAB中的

要创建时间向量,只需在初始日期中添加
持续时间
(以小时为单位)

% number of samples/data/dates
NumSmpl = 100;
DateVec = datetime(2019,3,3,12,0,0) + duration((1:NumSmpl)*24,0,0).'; % I prefer to have vectors rather than arrays, which is why I transpose it here
现在绘制数据

% assuming this is your signal
Sig = 1:NumSmpl;

subplot(2,2,1:2) % activate first row
plot(DateVec,Sig)

subplot(2,2,3) % bottom left
plot(DateVec,Sig)
% set axes limits
xlim([DateVec(3),DateVec(10)])

subplot(2,2,4) % bottom right
% plot only a fraction of the data
lg = DateVec > datetime(2019,3,6) & DateVec < datetime(2019,3,13);
plot(DateVec(lg),Sig(lg))
%假设这是您的信号
Sig=1:numspl;
子批次(2,2,1:2)%激活第一行
绘图(DateVec,Sig)
子批次(2,2,3)%左下角
绘图(DateVec,Sig)
%设置轴限制
xlim([DateVec(3),DateVec(10)])
子批次(2,2,4)%右下角
%只绘制一小部分数据
lg=DateVec>datetime(2019,3,6)和DateVec
我用两种不同的方式展示了部分情节。一个是使用
xlim
,另一个是使用逻辑索引


类似的功能应该可以使用(我在倍频程中尝试过,但在MATLAB中也可以使用):

data=randi(100,50,1);%一些随机数据
开始日期=日期编号('2019年3月3日','dd/mm/yyyy');
日期=开始日期+(1:长度(数据));
%绘图数据
图形
绘图(日期、数据)
日期标记('dd/mm')
%绘制数据的子集
日期_start=datenum('2019年3月16日','dd/mm/yyyy');%更改为您的实际开始日期
日期_end=datenum('2019年4月5日','dd/mm/yyyy');%更改为您的实际结束日期

dates\u subset=dates(dates>=dates\u start&dates=dates\u start&dates欢迎使用Stack Overflow!这恐怕是相当广泛的,请参阅。特别是因为您询问的是不同的、并不总是兼容的语言(MATLAB不是Octave),请在帖子中包含您自己解决这一问题的尝试(使用这两种语言中的任何一种),然后是包含该(非工作)代码的帖子,称为a。请注意,
子批次
已被最近的MATLAB版本所取代。@Adriaan thx,我不知道该命令。但MathWorks没有发出警告,因此我假设它至少还能使用两年=)
data = randi(100,50,1); % some random data

start_date = datenum('03/03/2019','dd/mm/yyyy');
dates = start_date + (1:length(data));

% Plot data
figure
plot(dates,data)
datetick('dd/mm')

% Plot subset of the data
dates_start  = datenum('16/03/2019','dd/mm/yyyy'); % change to your actual start date
dates_end = datenum('05/04/2019','dd/mm/yyyy'); % change to your actual end date
dates_subset = dates(dates>=dates_start & dates <=dates_end);
data_subset = data(dates>=dates_start & dates <=dates_end);
figure
plot(dates_subset,data_subset)
datetick('dd/mm')