You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab折线图X轴添加年份:datenum与datetick用法问询

解决MATLAB中用datenum和datetick设置X轴年份格式的问题

我之前也碰到过一模一样的困扰,折腾了几次终于摸清楚了datenum和datetick的正确打开方式,给你一步步拆解怎么搞定X轴显示年份的问题:


第一步:把日期数据转成MATLAB能识别的数值格式

MATLAB的plot函数本身不认识字符串格式的日期,所以得先用datenum把日期转换成它内部的数值型日期(本质是从0000年开始算的累计天数)。不管你的日期是字符串数组、字符向量还是datetime对象,都能轻松转换:

% 替换成你自己的实际日期数据
raw_dates = {'2020-03-15', '2020-09-20', '2021-04-05', '2021-11-30', '2022-05-22'};
% 转换为datenum格式
x_axis = datenum(raw_dates);

第二步:绘制基础折线图

用转换后的x_axis作为X轴数据,配合你的业务数据绘制折线图:

% 替换成你自己的Y轴数据
y_values = [8, 14, 11, 17, 21];

plot(x_axis, y_values, '-s', 'LineWidth', 1.2, 'MarkerSize', 6);
grid on;
xlabel('日期');
ylabel('数据值');
title('带年份标注的折线图');

第三步:用datetick设置X轴的年份格式

这一步是核心!datetick可以把X轴的数值型日期转成可读性强的日期字符串,还能自由指定显示格式,满足你显示年份的需求:

情况1:只想显示四位年份

% 设置X轴显示四位年份,keepticks参数用来保留当前刻度,避免MATLAB自动乱调刻度
datetick('x', 'yyyy', 'keepticks');

情况2:显示年份+月份(更实用,避免刻度太稀疏)

datetick('x', 'yyyy-MM', 'keepticks');

情况3:如果刻度太挤,手动指定要显示的日期点

如果你的日期跨度大、数据点多,自动刻度会挤在一起看不清,这时候可以手动设置要显示的刻度位置,比如只保留每年的第一天:

% 手动指定要显示的关键日期点
custom_ticks = datenum({'2020-01-01', '2021-01-01', '2022-01-01'});
% 设置X轴刻度为自定义的日期点
set(gca, 'XTick', custom_ticks);
% 再设置显示格式为年份
datetick('x', 'yyyy', 'keepticks');

关键小提醒

  • keepticks参数一定要加!不然MATLAB会自动调整刻度位置,很可能导致你设置的格式失效。
  • 如果你用的是MATLAB R2014b及以后的版本,其实用datetime数组更直观(不用转datenum),比如:
    x_datetime = datetime(raw_dates);
    plot(x_datetime, y_values);
    xtickformat('yyyy-MM-dd'); % 直接设置日期格式
    
    不过既然你指定要用datenum和datetick,前面的方法完全能满足你的需求。

你把示例里的日期和Y轴数据换成你自己的,调整格式字符串到你想要的样式,要是还有问题,就手动指定刻度点,肯定能搞定~

内容的提问来源于stack exchange,提问作者user466534

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:39:05