How can I solve this problem while plotting?

3 ビュー (過去 30 日間)
Pul
Pul 2021 年 8 月 27 日
コメント済み: Star Strider 2021 年 8 月 29 日
Hello everyone,
thanks to a member of this community, I found a way to do the differences between years. The problem is that when I go to plot, I don't obtain differences between 15 Dec 1998-7 Dec 1999 (for istance) but but differences between 1 Jan 1998-1 Jan 1999.
Can anyone help me please?
Thank you very much.
clear all
close all
LD = load('giulia_TT.mat');
giulia_TT = LD.giulia_TT;
GIULIA_YEARLY_N = retime(giulia_TT,'yearly', @(x)mean(x,1,'omitnan')); % Yearly Average
N=GIULIA_YEARLY_N.Var5*3.5;
SelIdx = year(GIULIA_YEARLY_N.Time) >= 1998; % Logical Mask Vectror
N_Sel = N(SelIdx);
N_Sel_Dif = -diff(N_Sel);
Years = 1998+(1:numel(N_Sel_Dif));
limits_mtx = datetime({'15 Dec 1998', '07 Dec 1999'; '07 Dec 1999', '30 Nov 2000';'30 Nov 2000','13 Nov 2001';'13 Nov 2001','30 Dec 2002';'30 Dec 2002','4 Jan 2004';'4 Jan 2004','22 Nov 2004';'22 Nov 2004','24 Nov 2005';'24 Nov 2005','15 Dec 2006';'15 Dec 2006','22 Jan 2008'; '22 Jan 2008','9 Jan 2011';'1 Jan 2010','16 Nov 2011';'6 Nov 2011','9 Jan 2013';'9 Jan 2013','5 Jan 2014';'5 Jan 2014','31 Jan 2015';'31 Jan 2015','25 Jan 2018';}, 'InputFormat','dd MMM yyyy')
Years = datetime(Years, 1, 1, 'Format', 'yyyy');
figure
plot(Years, N_Sel_Dif)
grid
xlim([min(Years) max(Years)])
xlabel('Years')
ylabel('Yearly N-Differences')
set(gca, 'XTick',Years)
plot(Years, limits_mtx,'g-^' ,'MarkerEdgeColor','k','MarkerFaceColor','g')
hold on
set(gca, 'ytick', -200:25:400);

採用された回答

Star Strider
Star Strider 2021 年 8 月 27 日
編集済み: Star Strider 2021 年 8 月 27 日
I do not understand what you are doing.
This call throws an error:
plot(Years, limits_mtx,'g-^' ,'MarkerEdgeColor','k','MarkerFaceColor','g')
because the first two arguments have no common dimensions.
I have no idea what you want to do, so try this to see if it is close.
Change it if it is not:
LD = load('giulia_TT[1].mat');
giulia_TT = LD.giulia_TT;
GIULIA_YEARLY_N = retime(giulia_TT,'yearly', @(x)mean(x,1,'omitnan')); % Yearly Average
N=GIULIA_YEARLY_N.Var5*3.5;
SelIdx = year(GIULIA_YEARLY_N.Time) >= 1998; % Logical Mask Vector
N_Sel = N(SelIdx);
N_Sel_Dif = -diff(N_Sel);
Years = 1998+(1:numel(N_Sel_Dif));
GIULIA_DAILY_N = retime(giulia_TT,'daily', @(x)mean(x,1,'omitnan')); % Daily Means
limits_mtx = datetime({'15 Dec 1998', '07 Dec 1999'; '07 Dec 1999', '30 Nov 2000';'30 Nov 2000','13 Nov 2001';'13 Nov 2001','30 Dec 2002';'30 Dec 2002','4 Jan 2004';'4 Jan 2004','22 Nov 2004';'22 Nov 2004','24 Nov 2005';'24 Nov 2005','15 Dec 2006';'15 Dec 2006','22 Jan 2008'; '22 Jan 2008','9 Jan 2011';'1 Jan 2010','16 Nov 2011';'6 Nov 2011','9 Jan 2013';'9 Jan 2013','5 Jan 2014';'5 Jan 2014','31 Jan 2015';'31 Jan 2015','25 Jan 2018';}, 'InputFormat','dd MMM yyyy');
Edges = [limits_mtx(:,1); limits_mtx(end,2)].';
for k = 1:numel(Edges)-1
idxrng = (GIULIA_DAILY_N.Time>=Edges(k)) & (GIULIA_DAILY_N.Time<Edges(k+1)); % Date Range
if (k+1) == numel(Edges)
idxrng = (GIULIA_DAILY_N.Time>=Edges(k)) & (GIULIA_DAILY_N.Time<=Edges(k+1)); % Date Range (Last Bin)
end
limits_counts(k) = mean(GIULIA_DAILY_N{idxrng,6},'omitnan'); % Mean Of Bin Range
end
% limits_counts
Years = datetime(Years, 1, 1, 'Format', 'yyyy');
figure
plot(Years, N_Sel_Dif)
grid
xlim([min(Years) max(Years)])
xlabel('Years')
ylabel('Yearly N-Differences')
set(gca, 'XTick',Years)
figure
plot(median(limits_mtx,2), limits_counts, 'g-^' ,'MarkerEdgeColor','k','MarkerFaceColor','g')
hold on
hold off
grid
set(gca, 'XTick',median(limits_mtx,2))
xtickformat('yyyy')
xlabel('Bin (Median Year)')
ylabel('Bin Mean')
% set(gca, 'ytick', -200:25:400);
Make appropriate changes to get the result you want.
EDIT — (27 Aug 2021 at 14:44)
To get differences between those specific years —
for k = 1:numel(Edges)-1
idxrng = (GIULIA_DAILY_N.Time>=Edges(k)) & (GIULIA_DAILY_N.Time<Edges(k+1)); % Date Range
if (k+1) == numel(Edges)
idxrng = (GIULIA_DAILY_N.Time>=Edges(k)) & (GIULIA_DAILY_N.Time<=Edges(k+1)); % Date Range (Last Bin)
end
idxrng = find(idxrng);
limits_dif(k) = diff(GIULIA_DAILY_N{idxrng([1 end]),6}); % Mean Of Bin Range
end
figure
plot(limits_mtx(:,2), limits_dif, 'g-^' ,'MarkerEdgeColor','k','MarkerFaceColor','g')
hold on
hold off
grid
set(gca, 'XTick',median(limits_mtx,2))
xtickformat('yyyy')
xlabel('Bin (Median Year)')
ylabel('Bin Ends Difference')
ylim([-1 1]*100)
text(limits_mtx(:,2), limits_dif, compose(' \\leftarrow %s', limits_mtx(:,2)), 'Horiz','left', 'Vert','middle', 'Rotation',80, 'FontSize',8)
Changing the plot call to:
plot(limits_mtx(:,2), limits_dif, 'g-^' ,'MarkerEdgeColor','k','MarkerFaceColor','g')
and adding the text call, the dates all appear to be correct when I run it.
Experiment to get the result you want.
.
  16 件のコメント
Pul
Pul 2021 年 8 月 28 日
Got it.
Thank you very much!
Star Strider
Star Strider 2021 年 8 月 29 日
As always, my pleasure!
.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCalendar についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by