0

我有以下代码用于生成以一年中的日期延长两年的数据图:

time = datenum('2008-04-17 02:00'):datenum('2009-11-24 12:27');
dateV = datevec(time);
for i = 1:length(time);
    DOY(i) = time(i) - datenum(dateV(i,1),0,0);
end
data = rand(length(time),1);
plot(time,data);
set(gca,'XTick',floor(time(1:50:end))','XTickLabel',floor(DOY(1:50:end))) 

有人可以建议一种方法来确保 xaxis 上的刻度适用于 10 的倍数,即 110、160 等。

添加部分:

DateTime=datestr(datenum('2007-01-01 00:00','yyyy-mm-dd HH:MM'):1/24:...
    datenum('2011-12-31 23:00','yyyy-mm-dd HH:MM'),...
    'yyyy-mm-dd HH:MM');
time = datenum(DateTime,'yyyy-mm-dd HH:MM');

dateV = datevec(time);
for i = 1:length(time);
    DOY(i) = time(i) - datenum(dateV(i,1),0,0);
end
data = rand(length(time),1);
plot(time,data);

mydays = ~mod(floor(DOY),40);  %true for days that are multiples of 10
set(gca,'XTick',floor(time(mydays))','XTickLabel',floor(DOY(mydays))) 

Error using set
Values must be monotonically increasing

这可以通过移除地板来解决,即

set(gca,'XTick',time(mydays),'XTickLabel',floor(DOY(mydays))) 

但它会生成粗体标签,这是为什么呢?

4

1 回答 1

2

mod您可以使用该函数生成 N 的倍数的天数索引。此函数返回一个数字除以 N 后的余数。

 mydays = ~mod(floor(DOY),10);  %true for days that are multiples of 10
 data = rand(length(time),1);
 plot(time,data);
 set(gca,'XTick',time(mydays),'XTickLabel',floor(DOY(mydays))) 

在您的情况下,每个 10 的倍数会导致 x 轴上的标签过多,因此可以尝试 40 的倍数,这会产生以下结果:图片.

最后,如果您想更改轴标签使其不再是粗体,您可以使用:

set(gca, 'FontWeight', 'normal');

或者类似地你可以改变它的大小和字体:

set(gca, 'FontSize', 14, 'FontName', 'Calibri')

编辑:更正了先前代码中的错字,并添加了关于更改标签字体的注释

于 2012-09-14T17:53:57.567 回答