NCL站点资料画中国区域气温散点图及分布图 |
您所在的位置:网站首页 › dayz左下角坠机点分布图 › NCL站点资料画中国区域气温散点图及分布图 |
为什么80%的码农都做不了架构师?>>> 参考了网上代码:http://bbs.06climate.com/forum.php?mod=viewthread&tid=11417 最NCL做站点资料不妨看看这个。代码如下: load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" begin file_path="/mnt/c/users/hong/desktop/1.txt" data=asciiread(file_path, (/4216,13/), "float") station=data(:,0) ;读入站点号 lat=data(:,1) ;读入纬度 lon=data(:,2) ;读入经度 day=data(:,6) ;由于我选的就是1951年1月的,所以只有日期存在区别。 temp=data(:,7) ;NCL是从0开始计数,因此第8列索引是7。 temp@_FillValue=32766 ;在数据说明里说了气温的缺测值是32766 ;由于在资料里是整数性,需要对其进行一下转换,其中经纬度要从60进制转为100进制 lat_a=round(lat*0.01,0)+(lat*0.01-round(lat*0.01,3))/60*100 lon_a=round(lon*0.01,0)+(lat*0.01-round(lat*0.01,3))/60*100 temp_a=temp*0.1 temp_av=new(136,"float") lon_av=new(136,"float") lat_av=new(136,"float") do i=0,135 temp_av(i)=dim_avg_n(temp_a(31*i:31*i+30),0) lon_av(i)=lon_a(31*i) lat_av(i)=lat_a(31*i) end do temp_max=max(temp_av) temp_min=min(temp_av) olon=new(64,"float") ;中国经度范围73°33′E-135°05′E,这里我设置经度70°-140° olat=new(41,"float") ;中国纬度范围3°51′N-53°33′N,这里我设置纬度0°-55° data1=new((/41,64/),"float") do i=0,63 olon(i)=72.0+i end do do l=0,40 olat(l)=l+15 end do ;要设置经纬度的单位和名称,否则会报错 lon_av!0 = "lon" lon_av@long_name = "lon" lon_av@units = "degrees-east" lon_av&lon = lon_av lat_av!0 = "lat" lat_av@long_name = "lat" lat_av@units = "degrees_north" lat_av&lat = lat_av olon!0 = "lon" olon@long_name = "lon" olon@units = "degrees-east" olon&lon = olon olat!0 = "lat" olat@long_name = "lat" olat@units = "degrees_north" olat&lat = olat ;进行插值操作 rscan=(/20,10,5/);网上是10 5 3 我这里用这个是为了让每个位置有数字,因为我没设置缺测值 R=obj_anal_ic_deprecated(lon_av,lat_av,temp_av,olon,olat,rscan, False) ;下面在开工作空间之前,设置了colormap,我直接复制过来了。 cmap = (/ \ (/ 255./255, 255./255, 255./255 /), \ ; 0 - White background. (/ 0./255 , 0./255 , 0./255 /), \ ; 1 - Black foreground. (/ 255./255, 0./255 , 0./255 /), \ ; 2 - Red. (/ 0./255 , 0./255 , 255./255 /), \ ; 3 - Blue. (/ 164./255, 244./255, 131./255 /), \ ; 4 - Ocean Blue. (/ 0./255 , 0./255 , 255./255 /), \ ; 5 - Bar 1 (/ 0./255 , 153./255, 255./255 /), \ ; 6 - Bar 2 (/ 0./255, 153./255, 153./255 /), \ ; 7 - Bar 3 (/ 0./255 , 255./255, 0./255 /), \ ; 8 - Bar 4 (/ 255./255, 255./255 , 102./255 /), \ ; 9 - Bar 5 (/ 255./255, 153./255 , 102./255 /), \ ; 10 - Bar 6 (/ 255./255, 0./255 , 255./255 /) \ ; 11 - Bar 7 /) wks=gsn_open_wks("png","example_195101") gsn_define_colormap(wks,cmap) ; res=True res@gsnAddCyclic=False ;如果设置为真,则循环点被加入数据,如果数据不是循环的,就设置为假就可以。 res@mpDataBaseVersion = "Ncarg4_1";网上的那个代码里没有这句,害我折腾了好久才明白 res@mpDataSetName="Earth..4" ;中国地图包含在这个叫Earth..4的地图库里 res@mpOutlineOn=True res@mpOutlineSpecifiers=(/"China:states","Taiwan"/) res@mpGeophysicalLineThicknessF=2.0 ;这两行是为了加粗边界和国界线 res@mpNationalLineThicknessF=2.0 res@mpMinLatF=15.0 res@mpMaxLatF=55.0 res@mpMinLonF=72 res@mpMaxLonF=135.0 res@mpDataBaseVersion = "Ncarg4_1" res@mpAreaMaskingOn = True ;使能填充覆盖 res@mpMaskAreaSpecifiers = (/"China:states","Taiwan"/) res@mpOceanFillColor=0 res@mpInlandWaterFillColor=0 res@cnFillOn=True;画填充图 res@cnLinesOn=False;不画等值线 res@cnLineLabelsOn=False;不要等值线上的标签 res@cnFillDrawOrder="PreDraw";先画填充 map=gsn_csm_contour_map(wks,R,res) end画出的是等值线填充图,图如下: 散点分布图代码: load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" begin file_path="/mnt/c/users/hong/desktop/1.txt" data=asciiread(file_path, (/4216,13/), "float") station=data(:,0) ;读入站点号 lat=data(:,1) ;读入纬度 lon=data(:,2) ;读入经度 day=data(:,6) ;由于我选的就是1951年1月的,所以只有日期存在区别。 temp=data(:,7) ;NCL是从0开始计数,因此第8列索引是7。 temp@_FillValue=32766 ;在数据说明里说了气温的缺测值是32766 ;由于在资料里是整数性,需要对其进行一下转换,其中经纬度要从60进制转为100进制 lat_a=round(lat*0.01,0)+(lat*0.01-round(lat*0.01,3))/60*100 lon_a=round(lon*0.01,0)+(lat*0.01-round(lat*0.01,3))/60*100 temp_a=temp*0.1 temp_av=new(136,"float") lon_av=new(136,"float") lat_av=new(136,"float") do i=0,135 temp_av(i)=dim_avg_n(temp_a(31*i:31*i+30),0) lon_av(i)=lon_a(31*i) lat_av(i)=lat_a(31*i) end do R=temp_av temp_max=max(temp_av) temp_min=min(temp_av) itv=(temp_max-temp_min)/5 arr=(/temp_min+itv,temp_min+2*itv,temp_min+3*itv,temp_min+4*itv/);我把所有温度均匀地用4个节点分配为5份 colors = (/10,38,56,66,94/);5个水平需要5个颜色来代表 num_markers=dimsizes(arr)+1; lat_new = new((/num_markers,dimsizes(R)/),float,-999); lon_new = new((/num_markers,dimsizes(R)/),float,-999); labels = new(dimsizes(arr)+1,string);最后出现在图下方的标签 do i =0,num_markers-1 if(i.eq.0);第一个水平即低于0的水平 indexes=ind(R.lt.arr(0)) labels(i)="R="+max(arr) end if if(i.gt.0.and.i.lt.(num_markers-1))then;中间的水平 indexes=ind(R.ge.arr(i-1).and.R.lt.arr(i)) labels(i)=arr(i-1)+" |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |