- 积分
- 3638
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
IDL时间轴我以前一直没用过,上周处理了一个文件,掌握了处理方法,原来只需要使用Julday(月,日,年,时,分,秒)即可,该函数的返回值是儒略日时间。
附件中的数据格式是:从上往下是高度层,从左往右是时间,中间的是某大气污染物浓度值,分隔符为“,”
把第一行与其他部分分开读入:
a=read_ascii('C:\Users\YGDY\Desktop\nj20160822-28.txt',$
header=head,DELIMITER=',',data_start=1)
help,a
help,head
输出:
** Structure <12119570>, 1 tags, length=2909580, data length=2909580, refs=1:
FIELD001 FLOAT Array[683, 1065]
HEAD STRING = Array[1]
观察数据,发现以逗号分隔后最后一列是无效的
这时我们把除了第一列(高度)和最后一列的数据拿出来:
t=a.field001
x=t[1:-2,*]
切掉“Height”文字的字符串放入head2,head2以","分隔放入head3,将head3的尾部空格去除放入head3,这样每列的时间就抽离出来了:
head_number=STRLEN(head)
head2=strmid(head,11,HEAD_NUMBER)
HEAD3=strsplit(HEAD2,',',/extract)
head3=strtrim(head3,0)
检查下一致性:
help,x,head3
help,head3[-1]
print,n_elements(head3[-1])
输出:
X FLOAT = Array[681, 1065]
HEAD3 STRING = Array[682]
<Expression> STRING = ''
1
发现head3多处一列,即无效的最后一列。
删除之:
;如果最后一个是空,即分号后面没有字符串,就把这一元素剔除掉
if(strlen(HEAD3[-1]) eq 0)then begin
head3=head3[0:-2]
endif
抽离出每一时间列中的年月日时分秒,这个拿数组直接算,不要循环:
year=strmid(head3,1,4)
month=strmid(head3,6,2)
day=strmid(head3,9,2)
hour=strmid(head3,12,2)
minute=strmid(head3,15,2)
second=strmid(head3,18,2)
写成儒略日格式:
time=julday(month,day,year,hour,minute,second)
对将进行的contour绘图进行x、y、z的维度检查:
help,x,transpose(t[0,*]),time
X FLOAT = Array[681, 1065]
<Expression> FLOAT = Array[1065]
TIME DOUBLE = Array[681]
符合!
transpose函数把一个[1,N]的数组转换成一个[N]的向量,在调用contour时便不会报错。
专家说污染物数值大于200不合理,则把超过200的都改为0:
p=where(x gt 200)
x[p]=0
绘图,横轴格式为:年(CYI)月(CMOI)日(CDI)时(CHI)分(CMI)秒(CSI),
其中,Y=year,MO=month,D=day,H=hour,M=minute,S=second
fig=contour(x,time,transpose(t[0,*]),rgb_table=13,yrange=[0,0.5],$
/fill,XTICKFORMAT='(C(CYI,"\",CMOi,"\",CDI,"-",CHI,":",CMI,":",CSI))')
更详细点:
C()时间输出操作
用于输出日期数据。
语法[n]C([c0,c1,...,cx]) 输入时默认格式
C(CDwA, X, CMoA, X, CDI, X, CHI, X, CMI, X, CSI, CYI5)
输出时默认格式
C(CDwA, X, CMoA, X, CDI2.2, X, CHI2.2, ":", CMI2.2, ":", CSI2.2,CYI5)
看着挺复杂吧,其实挺加到你看我慢慢解释
CMOA 字符月,想输出月的时候就用它
CMOI 数字月,想输出月的时候就用它
CDI天,想输出天的时候就用它
CYI年,想输出年的时候就用它
CHI时,想输出时的时候就用它
CMI分,想输出分的时候就用它
CSI秒,想输出秒的时候就用它
CSF带小数点的秒,想输出秒的时候就用它
CDWA,想输出周的时候就用它。有CDWA CdWA CdwA 三种写法,输出结果大小写不一样:
CAPA,想输出(上午下午)的时候就用它。有CAPA CaPA CapA,输出结果大小写不一样:
引用于:http://blog.sina.com.cn/s/blog_6787163301012trw.html
最后想想,并不是很难,
为什么困扰依旧的时间轴问题,只有在别人问我的时候才能解决?
|
|