Text in plot that has x-axis in terms of datetime

8 views (last 30 days)
Hello,
I have a plot that uses a datetime structure as an x axis and I want to add a text string on my plot. Typically I would do that using text(x,y,'text'). In this case I am not sure what I would use as 'x'. The 'annotation' command uses normalized values that do not move when I zoom or pan the plot. Would appreciate some input on what I would use as my 'x' in the text function. Thanks!

Accepted Answer

Ricardo
Ricardo on 21 Jun 2016
I just had this problem and I could position the text using datenum in this way:
text(datenum( the_date ), y_axis_val, text)

More Answers (2)

dpb
dpb on 2 Sep 2015
A date number of the time x. Same idea as with ordinary axes; the date axes is one with the limits based on the first/last date of the x vector. You can retrieve these from the plot as
xlohi=xlim;
then scale between those two at whatever point you wish would be one way...
  2 Comments
dpb
dpb on 2 Sep 2015
If (as I presume given the comment) this solved the problem, please "ACCEPT" the answer -- besides my ego, it notifies other users who find the question the answer was considered/is a good 'un, thereby (hopefully) helping fulfill the idea of the forum in being a database repository...

Sign in to comment.


Steven Lord
Steven Lord on 8 Jul 2025
Don't use datenum anymore. It is not recommended. Instead, use ruler2num or num2ruler to convert the datetime data into coordinates the text function can accept.
x = 1:10;
d = datetime(2025, 7, x);
y = x.^2;
h = plot(d, y);
value = ruler2num(d(5), gca().XAxis); % Convert July 5th to a number
text(value, 25, 'here')
grid on
The call gca().XAxis is a reference to the X axis of the current axes. ruler2num needs to know which ruler's coordinate system you're trying to convert into. If I wanted to be a little more careful (since which axes is the current axes can change easily, with a click in a different location in the figure or on a different figure) I could use the ancestor function to get the axes ancestor of the line created by plot. This is independent of which axes is current.
figure
h = plot(d, y);
ax = ancestor(h, 'axes');
value = ruler2num(d(7), ax.XAxis); % Remember d(7) is July 7th
text(value, 20, "y = 20 on July 7th")
grid on
You can see that the "y" starting the text lines up with July 7th (d(7)) on the X axis.

Categories

Find more on Dates and Time in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!