我有一个代码(下面),它绘制了简单的x,y数据.我的时间(x轴)最初是1-1257的数字,相当于我看的天数.我将其转换为序列日期以便绘制它.但是,当它在MATLAB中绘制时,x轴上没有足够的标签.当我尝试设置更多刻度标记时,我要么以串行格式返回标签(我想要'mmm yyyy'格式),或者当我尝试使用NumTicks时,我会得到很多标签,但它们不正确,因为它们只是原始标签重复多次.
% Find indexes at which the lat and lon match the conditions
lon_ind = find(X(:,1) == 224); % Longitude closest to 136 03.56W
lat_ind = find(Y(1,:) == -66.75); % Latitude closest to 66 39.67S
% Pull out all the data at the point 2240W and 66.75
data_point = data_All(lon_ind, lat_ind, :);
t = 1:1257; % Days 1:1257 inclusive. 20100101 to 20130611
y = reshape(data_point,[],1); % Change data_point into a 1 column matrix
x = datenum(2009, 12, 31) + t; % Convert t into serial numbers
% str = datestr(x, 'mmm yyyy'); % Choose format for x-axis
plot(x, y); % Plot data
datetick('x','mmm yyyy','keeplimits', 'keepticks'); % Set parameters
% NumTicks = 30;
% L = get(gca,'XLim');
% set(gca,'XTick',linspace(L(1),L(2),NumTicks))
set(gca,'XMinorTick','on','YMinorTick','on'); % Add minor ticks (without labels)
Run Code Online (Sandbox Code Playgroud)
我怎样才能使x轴有更多'mmm yyyy'格式的标签?
只需切换一些声明后,您的代码就能很好地工作!诀窍是首先增加刻度数,然后调用datetick.
有30个日期标记,标签当然太拥挤,不适合任何体面的情节.作为解决方案,我从文件交换中下载了xticklabelrotate.
这是修改后的代码.我使用虚拟y数据,以便其他人可以玩一个可行的例子.
t = 1:1257; % Days 1:1257 inclusive. 20100101 to 20130611
y = t.^2;
x = datenum(2009, 12, 31) + t;
str = datestr(x, 'mmm yyyy');
plot(x, y);
NumTicks = 30;
L = get(gca,'XLim');
set(gca,'XTick',linspace(L(1),L(2),NumTicks))
datetick('x','mmm yyyy','keeplimits', 'keepticks')
xticklabel_rotate;
set(gca,'XMinorTick','on','YMinorTick','on')
Run Code Online (Sandbox Code Playgroud)
结果看起来像这样:

对于任何现实世界的应用程序,永远不要忘记标记轴!:-)
编辑
使用上面的代码在给定的时间段内均匀分布一些xticks是一个坏主意,特别是当它与日期格式组合时,只能非常"粗略地"给出日期.
相反,你应该把你的蜱虫放在几个月的开头,否则偶然的观察者会误导.
相反,我建议使用此代码:
t = 1:1257; % Days 1:1257 inclusive. 20100101 to 20130611
y = t.^2;
x = datenum(2009, 12, 31) + t;
str = datestr(x, 'mmm yyyy');
plot(x, y);
tick_locations = datenum(2009,10:1:54,1);
set(gca,'XTick',tick_locations)
datetick('x','mmm yyyy','keeplimits', 'keepticks')
xticklabel_rotate;
Run Code Online (Sandbox Code Playgroud)
在这里,标签在2009年10月至54个月之间以1个月的间隔隔开,到2013年6月.(通过反复试验找到的数字.)

刻度现在总是在一个月的开头,这意味着它们之间的空间每个月都有所不同,应该如此.(FEB-MAR为28天,MAR-APR为31天)