Matlab或Octave在x轴上绘制自动生成的日期[关闭]。

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

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

matlab date plot octave
2个回答
1
投票

像这样的东西应该工作(我在Octave中试过,但也应该在MATLAB中工作)。

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')

这将产生以下图谱。

enter image description here

enter image description here


0
投票

你可以创建一个日期时间的向量,并将其作为x轴。查看 日期和时间算术 在MATLAB中。

要创建时间矢量,只需在MATLAB中添加一个 duration (小时)至您的初始日期

% 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))

我采用了两种不同的方式来展示部分情节。一种是通过使用 xlim 和另一个通过使用逻辑索引。

resulting plot

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