爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9799|回复: 10

[作图] 利用shapefile文件mask后颜色设置的问题

[复制链接]

新浪微博达人勋

发表于 2017-4-6 16:26:08 | 显示全部楼层 |阅读模式

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

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

x
家园的各位高手,我利用shapefile文件来做了mask,我定义了colormap为系统自带的“BlRe”,做出如下图,我想设置mask部分(箭头部分)的颜色,因为和图中的颜色太相近了,请问该如何设置呢?
代码如下,用gc_inout做的,也是家园的小伙伴指导的,希望指点一下,有什么方法可以设置?
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/wrf/WRF_contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"

begin
  ; -----------------------------------------------
  ; open file and read in data 整个中国版
  ; -----------------------------------------------
   files=systemfunc("ls wrfout_d02*")
    f=addfiles(files, "r")

  b=addfile("./wrfout_d02_2010-01-02_00:00:00", "r")
    ;printVarSummary(files)

  ; -----------------------------------------------
  ; Read character variable Times; Convert to string for plots
  ; Read vertical coordinate for plot labels
  ; -----------------------------------------------
  ;Times = chartostring(f->Times)   ; built-in function

  ; -----------------------------------------------
  ; Read 10 meter winds
  ; -----------------------------------------------
  t=wrf_user_getvar(f, "T2", -1)
  s       = dim_avg_n(t, 0)
  printVarSummary(s)
  s@long_name = "Surface Temperature: 2m"
  s=s-273.16
  s@description="Surface Temperature"
  s@units="C"


  s@lat2d = b->XLAT(0,:,:)         ; direct assignment
  s@lon2d = b->XLONG(0,:,:)

  s@_FillValue = 255.

   ; ----------------------------------------------
  ; Get the national boundary from a shapefile.
  ; We'll use this as a mask for the data.
  ; ----------------------------------------------
  natBdry = addfile("./Mainland_of_China.shp", "r")
  
  maskedS = new(dimsizes(s),typeof(s),s@_FillValue)
  maskedS@lat2d = s@lat2d
  maskedS@lon2d = s@lon2d
  ; Get the size of the lat/lon grid of variable "s"
  sDims = dimsizes(s)
  iNumLat = 96       ;这里直接用数值来确定经纬的格子
  iNumLon = 69       ;每个区域的范围都是不同的

  ; Put data in the areas that we don't want masked.
  do j=0,iNumLat-1
    print("masking row " + j)
    do i=0,iNumLon-1
      if(gc_inout(b->XLAT(0,j,i), b->XLONG(0,j,i), natBdry->y, natBdry->x)) then
        maskedS(j,i) = s(j,i)
      end if
    end do
  end do
  
  ; -----------------------------------------------
  ; create plots  
  ; -----------------------------------------------
  wks = gsn_open_wks("png" ,"ncl_tempreture_mask")                ; send graphics to PNG file

  ; We want a very specific colormap...
  gsn_define_colormap(wks, "BlRe")
  res                       = True             ; plot mods desired
  res@gsnFrame              = False            
  res@gsnDraw               = False
  res@gsnMaximize           = True
  ;res@cnLevelSelectionMode  = "ExplicitLevels"
  ;res@cnLevels              = (/-24,-22,-20,-18,-16,-14,-12,-10,-8,-6,-4,-2/)
  ;res@cnMinLevelValF        =  -28
  ;res@cnMaxLevelValF        =  0
  res@cnFillOn              = True             ; color plot desired
  res@cnLinesOn             = False            ; turn off contour lines
  res@cnLineLabelsOn        = False            ; turn off contour labels
  ; -----------------------------------------------
  ; Set map extent to zoom in on JJJ
  ; -----------------------------------------------
  res@mpMinLonF = 72.
  res@mpMaxLonF = 138.
  res@mpMinLatF = 18.
  res@mpMaxLatF = 55.
  res@mpGeophysicalLineColor = 1
  res@mpOceanFillColor       = 2                ; color for sea
  res@mpLandFillColor        = 3                ; color for land outside of borders
  res@mpOutlineBoundarySets  = "Geophysical"    ; draw coastlines for entire region
  res@mpGridAndLimbOn        = True
  res@mpGridLineColor        = (/ .25, .25, .25 /)
  res@mpGridLatSpacingF      = 4.0
  res@mpGridLonSpacingF      = 4.0
  
  ; ----------------------------------------------
  ; Turn on lat / lon labeling
  ; ----------------------------------------------
  res@pmTickMarkDisplayMode = "Always"         ; turn on tickmarks
  res@tmXTOn = False            ; turn off top   labels
  res@tmYROn = False            ; turn off right labels
   
  nt    =  0
;;do nt=0,ntim-1                               ; uncomment for loop
;;  do ll=0,klev-1
       ;res@tiMainString  = Times(nt)
       res@lbLabelBarOn  = True
       plot    = gsn_csm_contour_map(wks,maskedS(:,:),res)
;;  end do
;;end do
draw(plot)
frame(wks)
end

QQ截图20170406095406.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-4-7 09:01:46 | 显示全部楼层
自己顶一下,希望有高手能帮忙解答一下啊,先谢过了!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-10 17:14:14 | 显示全部楼层
可以试一下前景色,后景色foregroundcolor,backgroundcolor;或者换一下colormap
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-4-15 11:10:50 | 显示全部楼层
xhw0734 发表于 2017-4-10 17:14
可以试一下前景色,后景色foregroundcolor,backgroundcolor;或者换一下colormap

你好 在res中没有background和foreground的属性啊,并且colormap的这个值换了之后它还是跟着渐变的颜色走,我想知道怎么可以把masked的部分转换成白色或是另一种颜色
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-15 14:20:16 | 显示全部楼层
二楼说的不错,你仔细看例子,人家设定了background/foreground的特定颜色
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-4-15 15:30:16 | 显示全部楼层
尽头的尽头 发表于 2017-4-15 14:20
二楼说的不错,你仔细看例子,人家设定了background/foreground的特定颜色

不知道是不是这句话呢: res@mpLandFillColor        = 3                ; color for land outside of borders
因为代码中确实没有名为background等属性的设定,如果是的话,这里等于3,是cmap中的第4个颜色吗,可以这样设定吗,谢谢版主解答!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-4-15 15:57:38 | 显示全部楼层
尽头的尽头 发表于 2017-4-15 14:20
二楼说的不错,你仔细看例子,人家设定了background/foreground的特定颜色

我尝试改了改,确实如此,是我自己没有思考透彻,老是在想“background”等字眼,谢谢版主
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-10-9 06:53:45 | 显示全部楼层
请问楼主各省的shp文件在哪里可以下载呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-10-9 14:32:09 | 显示全部楼层
irides 发表于 2017-10-9 06:53
请问楼主各省的shp文件在哪里可以下载呢?

http://bbs.06climate.com/forum.p ... &extra=page%3D1这个帖子上有
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-10-15 12:44:25 | 显示全部楼层
FrankieLJY 发表于 2017-10-9 14:32
http://bbs.06climate.com/forum.php?mod=viewthread&tid=2754&extra=page%3D1这个帖子上有

看了几遍楼主的脚本,还是不太理解iNumLat以及iNumLon是如何确定的?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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