Where is the month, day and year string stored in a plot with a datetime axis which shows hours and minutes in the xticklabel string?

1 回表示 (過去 30 日間)
A somewhat specific question which I cannot find the answer for.
Suppose I have some random data measured at different times which I want to plot:
t1 = datetime('2023-04-01 04:00:00');
t2 = datetime('2023-04-01 12:00:00');
t = t1:seconds:t2;
data = rand(length(t),1);
plot(t,data,'.');
ax = gca;
This results in the following plot:
As you can see, this plot results in x tick labels as strings with hours and minutes. But in the bottom right hand corner of the plot, there is also an additional string showing the month, day and year.
Question: Where is this string stored and can it be edited?
I can't find it anywhere in the ax structure variable. The ax.XTickLabel only contains strings with hours and minutes:
>> ax.XTickLabel
ans =
9×1 cell array
{'04:00'}
{'05:00'}
{'06:00'}
{'07:00'}
{'08:00'}
{'09:00'}
{'10:00'}
{'11:00'}
{'12:00'}
I want to edit and customize this string, change its format, (or perhaps get rid of it entirely).
Any help is appreciated.
  4 件のコメント
Darcy Cordell
Darcy Cordell 2024 年 1 月 22 日
移動済み: Dyuman Joshi 2024 年 2 月 12 日
I marked @Star Strider's answer as the accepted. Yours doesn't quite do what I was hoping for. Still wondering if there's a workaround to Star Strider's answer for pre-2023b. Cheers.
Dyuman Joshi
Dyuman Joshi 2024 年 1 月 23 日
移動済み: Dyuman Joshi 2024 年 2 月 12 日
@Darcy Cordell, check this.
You can use datetick for that -
t1 = datetime('2023-04-01 04:00:00');
%I've changed the time
t2 = datetime('2023-04-01 05:00:00');
t = t1:seconds:t2;
data = rand(length(t),1);
plot(t,data,'.');
%Use datetick with the 15th Format Identifier, which corresponds to HH:MM
datetick('x', 15);

サインインしてコメントする。

採用された回答

Star Strider
Star Strider 2024 年 1 月 17 日
If you have R2023b, you can use the recently introduced xsecondarylabel function —
t1 = datetime('2023-04-01 04:00:00');
t2 = datetime('2023-04-01 12:00:00');
t = t1:seconds:t2;
data = rand(length(t),1);
plot(t,data,'.');
ax = gca;
xsecondarylabel(Visible="off") % New In R2023b
.
  2 件のコメント
Darcy Cordell
Darcy Cordell 2024 年 1 月 22 日
I don't have 2023b but I guess this is the best answer for those that do. Any workarounds for pre-2023b?
Star Strider
Star Strider 2024 年 1 月 22 日
The only option I can think of is to create a separate cell array of strings using the original cell array of 'XTickLabel' cell array of strings —
t1 = datetime('2023-04-01 04:00:00');
t2 = datetime('2023-04-01 12:00:00');
t = t1:seconds:t2;
data = rand(length(t),1);
figure
plot(t,data,'.');
title('Original')
figure
plot(t,data,'.');
ax = gca;
% get(ax)
xtl = ax.XTickLabel;
ax.XTickLabel = [];
ax.XTickLabel = xtl;
title('Original, Omitting ‘xsecondarylabel’ Without Using That Function')
That works here, as written, however you will need to try it to be certain that it works in your version.
Other variations (using dates instead of only times) might need a few other tweaks to make this approach work. I did not explore that.
If you want to recover the date information to use in a title or some other location, it can be recovered easily from the returned values in:
xt = ax.XTick
since that information remains even after the 'XTickLabel' values are changed. (I checked to be sure.)
.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeDates and Time についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by