爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7801|回复: 9

[经验总结] 站点插值格点后,等值线溢出中国区域,求解(已解决)

[复制链接]
发表于 2016-8-30 21:13:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 紫儿 于 2016-8-31 10:40 编辑

w2.PNG
如图是我将站点插值格点后作的图,根据老师要求,要画成等值线,可见中国以外地区也有线条,怎么去掉?我之前画过阴影图,则阴影图中国以外会被屏蔽掉,但等值线为什么不能?
脚本如下:
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"
begin
data= asciiread("e:/103/103-station.txt",(/103,3/),"float")
printVarSummary(data)
lat=data(:,1)
lon=data(:,2)
lon@units      = "degrees-east"
lat@units      = "degrees_north"
r  =asciiread("e:/103/siji/dong-f.txt",103,"float")
olon = fspan(72,137,132);17,25是插值成多少个格点
olat = fspan(17,56,80)
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
r@_FillValue = 99999.0
rscan = (/10,5,3/)   ;连续的有效半径大小,最大为10,依次递减
datahgt = obj_anal_ic_Wrap(lon,lat,r,olon,olat,rscan,False)
printVarSummary(datahgt)
wks = gsn_open_wks("ps","e:/103/siji/dong-f")
res = True
res@gsnDraw          = False  ; 先不画图
res@gsnFrame         = False   ; 先不翻页
res@gsnMaximize             = True
res@gsnAddCyclic  = False      ;由于我们的数据不是循环地球一周的,因此必须把这个置否
res@mpDataBaseVersion="Ncarg4_1"
res@mpDataSetName         = "Earth..4"   ; This new database contains
  res@cnFillDrawOrder         = "PreDraw"                                       
res@mpDataBaseVersion     = "MediumRes"  ; Medium resolution database
res@mpOutlineOn           = True         ; Turn on map outlines
res@mpOutlineSpecifiers   = (/"China:states","Taiwan"/)       ;China:states

  res@mpLambertMeridianF = 105.0
  res@mpLimitMode = "LatLon"
  

  res@mpAreaMaskingOn = True   ;使能填充覆盖
   ;res@mpMaskAreaSpecifiers    = (/"China","Taiwan","Disputed area between India and China","India:Arunachal Pradesh"/)
   res@mpMaskAreaSpecifiers    = (/"China","Taiwan"/)
  ;填充海洋,内陆等
  res@mpLandFillColor         = "white"
  res@mpInlandWaterFillColor  = "white"
  res@mpOceanFillColor        = "white"
  ;

  ;设置中国范围
  res@pmTickMarkDisplayMode="Always"
   res@mpMinLatF             =  15.0          ; Asia limits
  res@mpMaxLatF             =  55.0
  res@mpMinLonF             =  72.0
  res@mpMaxLonF             = 136.0

  res@cnFillOn=False;不填色,画阴影是则填色,选True
  res@cnLinesOn=True;画等值线,F为不画
  res@cnMonoLineColor=False ; 不同等值线不用的颜色,结合rainbow用
res@cnFillPalette="BlueRed";;用黄到红的色板"BlueRed"蓝到红"MPL_RdBu";红到蓝

   ; res@lbLabelBarOn = True       ;LabelBar显示      
  
  
  map= gsn_csm_contour_map(wks,datahgt,res)
  
  ;添加中国地图
cnres=True
cnres@china     = True       ;draw china map or not
cnres@river     = True       ;draw changjiang&huanghe or not
cnres@province  = True       ;draw province boundary or notres@nanhai    = True      
cnres@nanhai    = True;draw nanhai or not
cnres@diqu      = False       ; draw diqujie or no
   chinamap = add_china_map(wks,map,cnres)
   draw(map)                                                              
  frame(wks)                                                            
end
经过在论坛里的一番仔细的查找,问题已解决,只需添加res@cnLineDrawOrder    = "PreDraw"   
   
res@cnLabelDrawOrder   ="PreDraw"  即可解决问题,嗯,以后要先在论坛多多查找和自己的相似问题的解决方法。

评分

参与人数 1金钱 +5 收起 理由
dln + 5 赞一个!

查看全部评分

密码修改失败请联系微信:mofangbao
发表于 2016-8-31 13:48:02 | 显示全部楼层
{:5_213:}之前也遇到过类似问题,谢谢楼主分享
密码修改失败请联系微信:mofangbao
发表于 2016-9-18 09:12:18 | 显示全部楼层
请问这个chinamap = add_china_map(wks,map,cnres),ncl里并没有add_China_map这个函数吧??
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-9-18 09:57:29 | 显示全部楼层
夏蓝曦 发表于 2016-9-18 09:12
请问这个chinamap = add_china_map(wks,map,cnres),ncl里并没有add_China_map这个函数吧??

气象家园有详细解说,搜索中国地图部分
密码修改失败请联系微信:mofangbao
发表于 2016-9-19 18:27:43 | 显示全部楼层
{:eb502:}{:eb502:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

发表于 2016-9-21 16:33:48 | 显示全部楼层
谢谢楼主,这个问题困扰了我好久,现在有点眉目了
密码修改失败请联系微信:mofangbao
发表于 2017-3-15 19:36:11 | 显示全部楼层
res = True

res@cnLevelSelectionMode = "ManualLevels"
res@cnFillOn =True ; 打开颜色填色
res@cnLinesOn = False ; 关闭等值线线条
res@lbLabelBarOn        =False                            ; turn off label bar
res@gsnContourNegLineDashPattern = 1       ; sets negative contours to dash pattern 1负值画虚线线
res@cnLineLabelsOn         =False
   res@cnMinLevelValF = -1; Min contour
   res@cnMaxLevelValF = 1 ; Max contour
   res@cnLevelSpacingF = 0.1 ; Spacing  
  res@cnSmoothingOn = True   
  res@gsnDraw              = False           ; Do not draw plot
  res@gsnFrame             = False           ; Do not advance frome
  res@gsnAddCyclic  = False      ;由于我们的数据不是循环地球一周的,因此必须把这个置否
res@mpDataBaseVersion="Ncarg4_1"
res@mpDataSetName         = "Earth..4"   ; This new database contains
  res@cnFillDrawOrder         = "PreDraw"                                       
res@mpDataBaseVersion     = "MediumRes"  ; Medium resolution database
res@mpOutlineOn           = True         ; Turn on map outlines
res@mpOutlineSpecifiers   = (/"China:states","Taiwan","Disputed area between India and China","India:Arunachal Pradesh"/)

  res@mpLambertMeridianF = 105.0
  res@mpLimitMode = "LatLon"
  res@cnLabelDrawOrder   ="PreDraw"  

  res@mpAreaMaskingOn = True   ;使能填充覆盖
   ;res@mpMaskAreaSpecifiers    = (/"China","Taiwan","Disputed area between India and China","India:Arunachal Pradesh"/)
   res@mpMaskAreaSpecifiers    = (/"China","Taiwan"/)
  ;填充海洋,内陆等
  res@mpLandFillColor         = "white"
  res@mpInlandWaterFillColor  = "white"
  res@mpOceanFillColor        = "white"
  ;

  ;设置中国范围
  res@pmTickMarkDisplayMode="Always"
  res@mpMinLatF             =  5.0          ; Asia limits
  res@mpMaxLatF             =  55.0
  res@mpMinLonF             =  72.0
  res@mpMaxLonF             = 136.0

  res@lbLabelBarOn = False      ;LabelBar显示      






res1 = True

res1@cnFillOn              = False             ; turn on color
  res1@cnLinesOn             = True           ; turn off contour lines
   res1@cnLineLabelsOn        = False            ; turn off contour line labels  

   res1@gsnContourNegLineDashPattern = 1   
  res1@lbLabelBarOn = False   
  res1@gsnAddCyclic =False
res1@cnLevelSelectionMode = "ManualLevels"
res1@cnFillMode = "RasterFill"
  res1@cnRasterSmoothingOn = True

   res1@cnLevelSpacingF = 0.2; Spacing
   res1@cnConstFLabelOn  =False  
    res1@cnInfoLabelOn =False  
res1@gsnDraw              = False           ; Do not draw plot
  res1@gsnFrame             = False           ; Do not advance frome

res1@cnFillDrawOrder= "PreDraw"

resP                     = True         ; modify the panel plot
  resP@gsnMaximize         = True         ; large format
  resP@gsnPanelLabelBar    = True         ; add common colorbar
  resP@lbLabelAutoStride   = True         ; auto stride on labels
  ;resP@txString            = "2001"



neof=4

  plot = new(neof,graphic)
  plot2 = new(neof,graphic)

  do n=0,neof-1

    res@gsnLeftStringFontHeightF= 0.02




      plot2(n)=gsn_csm_contour(wks,rc(:,:,n),res1)

  plot(n)=gsn_csm_contour_map_ce(wks,prob(:,:,n),res)
  overlay(plot(n),plot2(n))

  end do
  ;overlay(plot,plot2)
  gsn_panel(wks,plot,(/2,2/),resP)

;***********************************************************
   draw(wks)
frame(wks)
end
QQ截图20170315194020.png
我等值线叠加了阴影   
阴影是  plot(n)=gsn_csm_contour_map_ce(wks,prob(:,:,n),res)


等值线  plot2(n)=gsn_csm_contour(wks,rc(:,:,n),res1)




请问这种情况怎么把等值线超出中国的地方去掉啊?????

密码修改失败请联系微信:mofangbao
 楼主| 发表于 2017-3-27 16:01:11 | 显示全部楼层
qq469015280 发表于 2017-3-15 19:36
res = True

res@cnLevelSelectionMode = "ManualLevels"

在你的等值线设置里加上res@cnLineDrawOrder    = "PreDraw"    这一句试试,这一句的意思是先画等值线,你可以查查官网
密码修改失败请联系微信:mofangbao
发表于 2017-5-27 17:03:49 | 显示全部楼层
解决燃眉之急!!!!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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