我有一个代码(下面),它绘制了简单的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'格式的标签?
答案 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')
结果如下所示:
对于任何真实世界的应用程序,永远不要忘记标记轴! : - )
修改强>
使用上面的代码在给定的时间段内均匀分布一些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月。(通过反复试验找到的数字。)
蜱现在总是在一个月的开头,这意味着它们之间的空间在每个月都有所不同,应该如此。 (FEB-MAR为28天,MAR-APR为31天)
答案 1 :(得分:0)
我用于此问题的快速修复方法是在应用datetick之前增加绘图的宽度。
然后可以根据需要缩小绘图宽度。
这个解决方案有点狡猾,并不像马丁那么强大。
set(gcf,'Position',[xPos yPos width height]);
datetick