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

时间:2013-06-24 13:58:13

标签: 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)

我怎样才能使x轴有更多'mmm yyyy'格式的标签?

2 个答案:

答案 0 :(得分: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')

结果如下所示:

enter image description here

对于任何真实世界的应用程序,永远不要忘记标记轴! : - )

修改

使用上面的代码在给定的时间段内均匀分布一些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;

此处,标签在2009年10月至54个月之间以1个月为间隔,有效期至2013年6月。(通过反复试验找到的数字。)

enter image description here

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

答案 1 :(得分:0)

我用于此问题的快速修复方法是在应用datetick之前增加绘图的宽度。

然后可以根据需要缩小绘图宽度。

这个解决方案有点狡猾,并不像马丁那么强大。

set(gcf,'Position',[xPos yPos width height]);
datetick