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
相关产品推荐
相关产品推荐

