- 积分
- 55950
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 MeteoInfo 于 2016-6-7 22:40 编辑
中国地面国际交换站气候资料日值数据集(V3.0)可以在“中国气象数据网”上下载,每个月每个要素一个文件(ASCII),具体格式说明见网站的相关文档。以2012年5月温度数据文件为例,各列分别为站号、纬度、经度、高度、年、月、日、平均温度、最低温度、最高温度、平均温度质量控制码、最低温度质量控制码、最高温度质量控制码。
50353 5143 12639 1774 2012 5 1 103 164 19 0 0 0
50353 5143 12639 1774 2012 5 2 126 192 31 0 0 0
50353 5143 12639 1774 2012 5 3 90 126 67 0 0 0
50353 5143 12639 1774 2012 5 4 87 139 70 0 0 0
50353 5143 12639 1774 2012 5 5 98 165 39 0 0 0
50353 5143 12639 1774 2012 5 6 110 149 68 0 0 0
50353 5143 12639 1774 2012 5 7 103 131 86 0 0 0
50353 5143 12639 1774 2012 5 8 115 165 39 0 0 0
50353 5143 12639 1774 2012 5 9 133 196 79 0 0 0
50353 5143 12639 1774 2012 5 10 128 200 47 0 0 0
50353 5143 12639 1774 2012 5 11 141 240 22 0 0 0
50353 5143 12639 1774 2012 5 12 181 254 75 0 0 0
...
MeteoInfoLab有readtable()函数,很适合读取这种表格式的文本数据,文件中没有列名,需要设置headlines=-1,可以用colnames参数设置各数据列的名称。数据被读入一个表格后,可以用列名来获取某一列的数据。
下面示例从表格中利用sql()函数获取各站点2012年5月1日的数据表格,然后绘制平均气温的站点分布图。需要注意的是数据中经纬度是度分格式,要转化为度。
- #Read table data
- fn = 'D:/Temp/ascii/st_dayave/SURF_CLI_CHN_MUL_DAY_CES-TEM-12001-201205.txt'
- col_names = ['Stid','Lat','Lon','Alt','Year','Month','Day','T_Ave','T_Max',\
- 'T_Min','Code_Ave','Code_Max','Code_Min']
- table = readtable(fn, headerlines=-1, format='%s%3f%3i%3f%3i', colnames=col_names)
- #Sql - only select rows with 'Day = 1'
- table = table.sql('Day = 1')
- #Get data from table
- stid = table['Stid']
- lon = table['Lon']
- d = (lon / 100).astype('int')
- m = (lon - d * 100) / 60
- lon = d + m
- lat = table['Lat']
- d = (lat / 100).astype('int')
- m = (lat - d * 100) / 60
- lat = d + m
- temp = table['T_Ave'] * 0.1
- #Plot
- axesm()
- bou2_layer = shaperead('D:/Temp/map/bou2_4p.shp')
- bou1_layer = shaperead('D:/Temp/map/bou1_4l.shp')
- geoshow(bou2_layer, edgecolor='lightgray')
- geoshow(bou1_layer, facecolor=(0,0,255))
- layer = scatterm(lon, lat, temp, 20)
- title('Temperature (2012-05-01)')
- colorbar(layer)
- xlim(72, 136)
- ylim(16, 55)
- #Add south China Sea
- sc_layer = bou1_layer.clone()
- axesm(position=[0.14,0.15,0.15,0.2], axison=False, frameon=True)
- geoshow(sc_layer, facecolor=(0,0,255))
- xlim(106, 123)
- ylim(2, 23)
下面示例用sql()函数提取54511站的整月数据表格,并绘制气温变化图。
- #Read table data
- fn = 'D:/Temp/ascii/st_dayave/SURF_CLI_CHN_MUL_DAY_CES-TEM-12001-201205.txt'
- col_names = ['Stid','Lat','Lon','Alt','Year','Month','Day','T_Ave','T_Max',\
- 'T_Min','Code_Ave','Code_Max','Code_Min']
- table = readtable(fn, headerlines=-1, format='%s%3f%3i%3f%3i', colnames=col_names)
- #Sql - only select rows with 'Stid = "54511"'
- table = table.sql('Stid = "54511"')
- #Get data from table
- day = table['Day']
- t_ave = table['T_Ave'] * 0.1
- t_min = table['T_Min'] * 0.1
- t_max = table['T_Max'] * 0.1
- #Plot
- plot(day, t_ave, 'r-o', label=u'平均温度')
- plot(day, t_min, 'g-^', label=u'最低温度')
- plot(day, t_max, 'b-s', label=u'最高温度')
- xlim(1, 31)
- ylim(10, 40)
- legend(loc='upper center', fontname=u'宋体', orientation='horizontal', frameon=False)
- xlabel(u'日', fontname=u'宋体')
- ylabel(u'温度(摄氏度)', fontname=u'宋体')
- xaxis(minortick=True)
- yaxis(minortick=True)
- title(u'站点54511日温度变化(2012年5月)', fontname=u'黑体')
|
|