Text in plot that has x-axis in terms of datetime
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
George Mathai
am 1 Sep. 2015
Beantwortet: Steven Lord
am 8 Jul. 2025
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!
0 Kommentare
Akzeptierte Antwort
Ricardo
am 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)
1 Kommentar
Weitere Antworten (2)
dpb
am 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 Kommentare
dpb
am 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...
Steven Lord
am 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.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Dates and Time finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!