Datetick在图中没有显示足够的刻度线

Sug*_*kie 5 matlab plot

我有一个代码(下面),它绘制了简单的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'格式的标签?

Mar*_*.H. 9

只需切换一些声明后,您的代码就能很好地工作!诀窍是首先增加刻度数,然后调用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天)