我有一个带有mmyyyy
和SPI
(标准化降水指数)变量的两列数据。前两个样本没有数据(NAN
)。档案是:
011982 NAN
021982 NAN
031982 -1.348
.
.
.
122013 1.098
我将时间和SPI数据加载到MATLAB中,然后我想绘制它,但它不工作。
我想绘制直线图,但我真的不知道如何在x轴上绘制时间,我希望我的x轴只显示年份。
发布于 2016-03-29 06:08:04
我正在添加另一个答案,它适用于更早的MATLAB版本,没有table
或datetime
数据类型。
和以前一样,我们首先从文件中导入数据,但这次我们将日期作为字符串读取,然后使用datenum
函数将日期转换为序列号(定义为“1月0,0000”之后的天数):
% import data from file
fid = fopen('file.dat', 'rt');
C = textscan(fid, '%s %f');
fclose(fid);
% create matrix
t = [datenum(C{1},'mmyyyy') C{2}];
数据如下:
>> format long
>> t(1:10,:)
ans =
1.0e+05 *
7.239120000000000 NaN
7.239430000000000 NaN
7.239710000000000 0.000005606888474
7.240020000000000 0.000009156147863
7.240320000000000 0.000004504804864
7.240630000000000 0.000008359005819
7.240930000000000 0.000007436313932
7.241240000000000 0.000002800134237
7.241550000000000 0.000005261613664
7.241850000000000 0.000001809901372
接下来,我们像以前一样绘制数据,但是使用datetick
函数将x轴格式化为日期(“yyyy”数年):
plot(t(:,1), t(:,2))
datetick('x', 'yyyy')
xlabel('Date'), ylabel('Standardized Precipitation Index')
不幸的是,当你放大和缩小时,滴答标签不会自动更新.好消息是,文件交换上有解决此问题的解决方案,例如达蒂克比格和datetick2。
发布于 2016-03-26 23:49:28
在MATLAB中使用新的datetime
数据类型(在R2014b中添加),这应该很容易。
下面是一个例子。首先,我们将数据加载到MATLAB table
中。
% import data from file
fid = fopen('file.dat', 'rt');
C = textscan(fid, '%{MMyyyy}D %f');
fclose(fid);
% create table
t = table(C{:}, 'VariableNames',{'date','SPI'});
你会得到这样的东西:
>> t(1:10,:)
ans =
date SPI
______ ________
011982 NaN
021982 NaN
031982 2.022
041982 1.5689
051982 0.75813
061982 -0.74338
071982 -1.7323
081982 -2.4466
091982 -0.86604
101982 0.085698
在用日期和时间绘制数据旁边,它就像调用plot
一样简单
plot(t.date, t.SPI)
xlabel('Date'), ylabel('Standardized Precipitation Index')
默认情况下,plot
根据数据范围选择勾标位置。放大或缩小绘图时,滴答标签会自动调整到新的轴限值。
但是,如果需要,还可以为自定义格式标签指定datetime
滴答标签。请注意,当您这样做时,情节总是按照指定的值格式化滴答标签,它们不会在缩放时调整:
plot(t.date, t.SPI, 'DatetimeTickFormat','yyyy')
https://stackoverflow.com/questions/36244760
复制