- dateshift - to shift a date to the start of the month
- calmonths - to increment the start date by exactly one month
- xline - create a vertical line that continues to infinity
Finding start dates and end dates of a year and plot them
12 次查看(过去 30 天)
显示 更早的评论
I have this code
t=datetime(2017,1,1) + hours(1:8760); % terminals per hour for the whole year
plot(t, y); % plot the the data versus year's hours
MidleMonths = datetime(year,1:12,15); % desired tick locations, as datetimes
set(gca, 'xtick', MidleMonths);
hold on
Now
I want to:
- determine the start date and end date of each month in the above year.
- Then, plot dotted lines on the start dates and end dates of the months of the above year.
- There is no magnitude (Y values) for the dotted lines (start and end dates). The dotted lines will go to infinity (up to the top of the image).
How can I do it please?
See the target figure ( this dotted lines done on PowePoint)
0 个评论
采纳的回答
Cris LaPierre
2020-5-8
I would suggest looking into the following functions
Here's a dummy example to get you started
t=datetime(2017,1,1) + hours(1:8760); % terminals per hour for the whole year
% ignore code for y. Just recreating a shape similar to the original plot
y = 30-(([1:length(t)]-4380).^2)/1e6 + 15*rand([1,length(t)]);
plot(t, y); % plot the the data versus year's hours
% Create vector of dates from start of the first month to end of t incrementing by 1 month
mStart = dateshift(min(t),"start","month"):calmonths(1):max(t)
% Add vertical line for start of each month
for l = 1:length(mStart)
xline(mStart(l),'--')
end
% Set display format of dates on x-axis
xtickformat(gca,"MMM yy")
8 个评论
Cris LaPierre
2020-5-11
Not sure how far you got. Here's how I might do it.
% determine where to put vertical lines
mStart = dateshift(min(t),"start","month"):calmonths(1):max(t);
% get a unique color for each month using the jet colormap
C = jet(length(mStart)-1);
for l = 1:length(mStart)
xline(mStart(l),'--')
% Add colored patch for each month.
if l>1
% Get 4 X coordinates for patch
d1=day(dateshift(mStart(l-1),'start','month'),"dayofyear")-1;
d2=day(dateshift(mStart(l-1),'end','month'),"dayofyear");
xBox=[d1 d2 d2 d1];
% Get 4 Y coordinates for patch
yBox=sort([get(gca,'YLim') get(gca,'YLim')]);
% Add patch. Set transparency by adjusting FaceAlpha.
hold on
patch(xBox,yBox,C(l-1,:),'FaceAlpha',0.2,'EdgeColor','none')
hold off
end
end
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Polygons 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!