爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14431|回复: 10

ncl用循环语句画一张多图,加中国底图,图不全

[复制链接]

新浪微博达人勋

发表于 2016-2-27 20:49:57 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
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"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
;load "$NCARG_ROOT/lib/ncarg/nclscripts/cnmap/cnmap.ncl"
load  "$GEODIAG_ROOT/cnmap/cnmap.ncl"
begin
month = (/"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug"/)
f=addfile("air.mon.mean.surf.nc","r")
air = f->air
lat = f->lat
lon = f->lon
missvalue = f->air@_FillValue
nlat = dimsizes(lat)
nlon = dimsizes(lon)
r1= new((/nlat,nlon,8/),float)
r1!0 = "lat"
r1!1 = "lon"
r1&lon = lon
r1&lat = lat
;printVarSummary(r1)
r1@_FillValue = 1e+20
t1= new((/nlat,nlon,8/),float)
t1!0 = "lat"
t1!1 = "lon"
t1&lon = lon
t1&lat = lat
t1@_FillValue = 1e+20
do i=0,7
var=air(948+i:1320+i:12,:,:)
  
;时间序列路径
N= asciiread("T-30hPa.txt",(/32/),"float")
printVarSummary(N)

   
;相关-t检验
lt= var(lat|:,lon|:,time|:)
printVarSummary(lt)
r1(:,:,i) = escorc(N,lt)
t1(:,:,i) = r1(:,:,i)* sqrt((32.-2.)/(1-r1(:,:,i)^2))
end do
===============plot=================
wtype="png"
wks = gsn_open_wks(wtype,"air.T30hPa.1979-2010.CN.ncepn")
    map=new(8,graphic)
shade = new(8,graphic)  
plot = new(8,graphic)

gsn_define_colormap(wks,"bluered")
do i =0,7
res    = True            
res@gsnMaximize   = True
res@gsnDraw   = False
res@gsnFrame   = False
;>------------------------------------------------------------------------------------------------------------------<
;            set for the map
;>------------------------------------------------------------------------------------------------------------------<
mapres    = res
mapres@mpMinLatF               = 17.                        
mapres@mpMaxLatF               = 55.
mapres@mpMinLonF               = 72.
mapres@mpMaxLonF               = 136.
mapres@mpFillOn                = True
mapres@mpOutlineOn             = False  ; Use outlines from shapefile
;mapres@cnFillDrawOrder         = "PreDraw"
mapres@mpDataBaseVersion       = "MediumRes"
mapres@mpDataSetName           = "Earth..4"
mapres@mpAreaMaskingOn         = True
mapres@mpMaskAreaSpecifiers    = (/"China","Taiwan","Disputed area between India and China","India:Arunachal Pradesh"/)
mapres@mpLandFillColor         = "white"
mapres@mpInlandWaterFillColor  = "white"
mapres@mpOceanFillColor        = "white"
mapres@mpOutlineBoundarySets   = "NoBoundaries"
mapres@mpProjection  = "LambertConformal"   ;兰伯特投影
mapres@mpLambertMeridianF = 110.0
mapres@mpLimitMode  = "LatLon"
mapres@mpLambertParallel1F = .001      ;Default: .001 ;可以自己改一改,看看投影有什么不同,挺有趣的
mapres@mpLambertParallel2F = 89.999    ;Default: 89.999
mapres@gsnRightString  = "95%"
map(i) = gsn_csm_map(wks,mapres)
;--------------画图
shres    = res   
shres@cnFillOn   = True           
shres@cnLinesOn   = False
shres@cnFillDrawOrder  = "Predraw";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;注意要有这个否则等值线会溢出
shres@cnInfoLabelOn     = False
shres@cnLevelSelectionMode = "ExplicitLevels"
shres@cnLevels   = (/-2.750,-2.048,2.048,2.750/)
shres@cnLineLabelsOn  = False      ; turn on line labels
shres@cnMonoFillColor  = False
shres@cnFillColors  = (/2,66,0,189,253/)
shres@lbLabelBarOn          = False
shres@gsnLeftString      = month(i)
shade(i) = gsn_csm_contour(wks,t1(:,:,i),shres)

cres    = res
cres@cnFillOn   = False           
cres@cnLinesOn   = True
cres@cnLineDrawOrder  = "Predraw";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;注意要有这个否则等值线会溢出
;cres@cnLevelSelectionMode = "ExplicitLevels"
;cres@cnLevels   = (/-2.750,-2.042,-1.,0.,1.,2.042,2.750/)
cres@cnLevelSelectionMode = "ManualLevels"
cres@cnMaxLevelValF  = 0.8
cres@cnMinLevelValF  = -0.8
cres@cnLineThicknessF  = 2.5
cres@cnLineLabelPlacementMode = "constant"
cres@gsnContourNegLineDashPattern = 4   
cres@cnLineLabelsOn  = False
cres@cnInfoLabelOn  = False
cres@lbLabelAutoStride  = True  
plot(i)= gsn_csm_contour(wks,r1(:,:,i),cres)
;>============================================================<
;                      add China map
;>------------------------------------------------------------<
cnres             = True
cnres@china       = True       ;draw china map or not
cnres@river       = True       ;draw changjiang&huanghe or not
cnres@province    = False       ;draw province boundary or not
cnres@nanhai      = True       ;draw nanhai or not
cnres@diqu   = False       ; draw diqujie or not
chinamap  = add_china_map(wks,map(i),cnres)
;>============================================================<
overlay(map(i),shade(i))
overlay(map(i),plot(i))

end do
resP                     = True                ; modify the panel plot
  resP@gsnPanelLabelBar    = True                ; add common colorbar
  resP@lbLabelFontHeightF  = 0.007   
   resP@lbBoxLinesOn  =False
  gsn_panel(wks,map,(/4,2/),resP)             ; now draw as one plot
frame(wks)
end  
air.T30hPa.1979-2010.CN.ncepn.000001.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-13 20:46:04 | 显示全部楼层
本帖最后由 心如止水的饭团 于 2016-3-13 20:47 编辑

把循环里面的这句
chinamap  = add_china_map(wks,map(i),cnres)
改成下面这两句
dumstr            = unique_string("poly")
map@$dumstr$ = add_china_map(wks,map(i),cnres)
这样就能循环画起来了,ploy可以自己随便取名的


wxid_5hizsamuisuz22_1457871083667_39.png
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2016-2-29 11:00:40 | 显示全部楼层
做个 标记,我是画中国降水的时候,画面版图,有的图带中国地图,有的图不带,但是南海的那个框框都带上了,出现的警告是:
类似 这种
warning:TransformPostDraw: tfPolyDrawList element 1 is invalid
warning:TransformPostDraw: tfPolyDrawList element 2 is invalid   很多
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-14 14:04:09 | 显示全部楼层
学习
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2016-4-10 11:13:00 | 显示全部楼层
心如止水的饭团 发表于 2016-3-13 20:46
把循环里面的这句
chinamap  = add_china_map(wks,map(i),cnres)
改成下面这两句

感谢楼主分享,我想请问load  "$GEODIAG_ROOT/cnmap/cnmap.ncl"是自己写的吗,能不能分享一下,谢谢您了。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-4-11 12:36:38 | 显示全部楼层
http://bbs.06climate.com/forum.p ... &extra=page%3D1  是从这边下的文件,$GEODIAG_ROOT是我自己添加的路径,你可以看看链接的帖子怎么用的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-8-30 21:51:07 | 显示全部楼层
学习了 现在还不能直接在地图上画出来南海那里是吗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-3-7 10:18:15 | 显示全部楼层
多谢楼主和大神分享{:5_213:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-16 15:27:56 | 显示全部楼层
心如止水的饭团 发表于 2016-3-13 20:46
把循环里面的这句
chinamap  = add_china_map(wks,map(i),cnres)
改成下面这两句

感谢前辈!最近画站点全国的图,也是出现这种几个一起画就掉了边界线的只剩南海框架和涂色的情况,找了好久都没有解决办法,最后采用EPS自己拼起来的做法,看到帖子以后试了,也成功了,再次感谢前辈!也不会再提示POLY的错误了~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-12-11 17:56:16 | 显示全部楼层
超级感谢~~
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表