Как лучше всего установить ось даты в Matlab - PullRequest
0 голосов
/ 11 декабря 2018

Не могли бы вы помочь мне с настройкой оси дат в Matlab или указать мне правильный пост?

Моя проблема заключается в следующем: у меня есть несколько цен и дат в числовом формате, которые я хочу построить,например:

 Prices = repmat([10; 5; 3; 4; 11; 12; 5; 2],10,1);

 Dates = [726834:726834+8*10-1]';

Если я нанесу их так:

 plot(Dates,Prices)
 dateaxis('x',17)

Я получу значения по оси X, которые мне не нужны, потому что они выглядят нерегулярно (я думаю, что они следуютопределенные правила, но они не выглядят хорошими).Как я могу наилучшим образом установить их, например, всегда на первое число месяца, или на первое января, и на первое июля, или на такое?Я знаю, что могу использовать set (gca, 'xtick', ?? ??);но мне не хватает некоторого обзора того, как именно я могу это сделать, и помощь Matlab мне не помогает.

1 Ответ

0 голосов
/ 12 декабря 2018

Этот код обозначает участок с первым днем ​​каждого месяца.Чтобы получить каждый январь или июль, должны быть выбраны только определенные элементы массива month.Стратегия состоит в том, чтобы получать каждый последний день месяца, используя eomdate, и прибавлять к 1. На рисунке 1 показаны первые дни каждого месяца, а на рисунке 2 показаны месяцы, выбранные вами в массиве months_to_display.

Prices = repmat([10; 5; 3; 4; 11; 12; 5; 2],10,1);

Dates = [726834:726834+8*10-1]';

firstDate = strsplit(datestr(Dates(1)-1, 'dd,mm,yyyy'),',');
lastDate = strsplit(datestr(Dates(end), 'dd,mm,yyyy'),',');

months = mod(str2double(firstDate{2}):str2double(lastDate{2})+12*(str2double(lastDate{3})-str2double(firstDate{3})),12);
months(months == 0) = 12;

years = zeros(1,length(months));
currYear = str2double(firstDate{3});
for i = 1:length(months)
    years(i) = currYear;
    if (months(i) == 12)
        currYear = currYear + 1;
    end
end

dayCount = eomdate(years,months);
firstDates = dayCount+1;

figure(1)
plot(Dates, Prices)
xticks(firstDates);
xticklabels(datestr(firstDates));

months_to_display = [1 7];
months_to_display = months_to_display - 1;
months_to_display(months_to_display == 0) = 12;
months_to_collect = ismember(months, months_to_display);

months = months(months_to_collect);
years = years(months_to_collect);

dayCount = eomdate(years,months);
firstDates = dayCount+1;

figure(2)
plot(Dates, Prices)
xticks(firstDates);
xticklabels(datestr(firstDates));
...