Creating transparent rectangles when x values are times with dates
3 次查看(过去 30 天)
显示 更早的评论
I understand how to use the patch function to create a shaded transparent rectangle when the x and y values are just numbers. For example, the code
plot([1 2],[2 1])
x = [1.25 1.5 1.5 1.25];
y = [1 1 1.75 1.75];
p=patch(x,y,'r');
set(p,'FaceAlpha',0.5);
creates a graph with the plotted line and a transparent red rectangle. My actual plot has the x values (which are a time and date) exported from excel, and then converted to matlab date and time by using datetime and stored in the vector Time. After plotting my data, I tried to do something like this to add the shaded rectangle:
x = [Time(1) Time(2) Time(2) Time(1)];
y = [30 30 35 35];
p=patch(x,y,'r');
set(p,'FaceAlpha',0.5);
This gives me the error: "Error using patch. Vectors must be the same length." The vectors x and y are both length 4, so I don't understand why I get this error. Since it worked in the simple example, I am assuming it has something to do with the x values being in the datetime form.
5 个评论
James
2017-1-18
编辑:James
2017-1-18
Digging some into the source code for stairs, it looks like there's an undocumented function to do this: matlab.graphics.internal.makeNumeric.
[XData, YData] = matlab.graphics.internal.makeNumeric(axis_handle, XData, YData);
Like all undocumented/internal functionality, your mileage may vary and it's subject to change at any time.
回答(2 个)
James Uber
2018-1-20
I had the same problem using patch. fill() has no such limitation with date time axes, so perhaps that will work for you as well.
1 个评论
Alan Bindemann
2019-1-8
Thanks, fill works much better than rectangle as it supports datetime values.
Jan
2017-1-18
Please try to convert the time to a numerical format:
TimeNum = datenum(Time);
TimeNum = x2mdate(xlsread('timesheet.xlsx', sheet, 'E:E'));
Then plotting should work. To get rid of the ugly axis lables, use datetick.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Dates and Time 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!