爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10205|回复: 8

[作图] 求助:NCL在地图之上添加线条

[复制链接]

新浪微博达人勋

发表于 2014-9-15 16:14:11 | 显示全部楼层 |阅读模式

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

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

x
使用NCL,先画了张空白地图,接下来想在其上添加5条短线。不知道是哪里设置的不对,以至于只看到空白地图,看不到短线。可能是order的问题,但试了很多次,不知道应该改动哪里才对。希望得到有类似经验的同仁的帮助,先道声谢谢了啦~

脚本如下:
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/wrf/WRFUserARW.ncl"
;************************************************
begin
         a=asciiread ("barmes.txt", (/25,29/) , "float")
         lat=fspan(10,60,25)
         lon=fspan(70,140,29)
         lat@units="degrees_north"
         lon@units="degrees_east"
         a!0="lat"
         a!1="lon"
         a&lat=lat
         a&lon=lon
         wks = gsn_open_wks("X11","map")
         res=True
         ;;;;;;;;;;;限定地图区域绘图;;;;;;地图和数据要分别设置,互相独立;;;;;;;;;;;;;
           res@mpLimitMode       = "LatLon"
           res@mpMinLatF         = 10
           res@mpMaxLatF         = 60
           res@mpMinLonF         = 70
           res@mpMaxLonF         = 140
         ;;;;;;;;;;;;;只显示中国区域的图;;;;;;;;;;;;;;;;;;;;;;
         res@mpDataBaseVersion="Ncarg4_1"                ;中等分辨率
         res@mpDataSetName="Earth..4"                        ;第4版地图,有中国边界数据
         res@mpOutlineOn            = True
         res@mpOutlineSpecifiers=(/"China:states","Taiwan"/)        ;中国边界有问题,缺藏南、台湾
         res@mpOutlineBoundarySets ="NoBoundaries"
         ;;;;;;;;;;;填充颜色;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         res@mpFillDrawOrder  = "PreDraw"                  ;设置画图顺序,先填充颜色,后把海洋覆盖掉
         res@mpAreaMaskingOn = True                          ;使能填充覆盖
         res@mpMaskAreaSpecifiers = (/"China:states","Taiwan"/)
         res@mpOceanFillColor = 0                             ;用白色填充海洋0是colormap的索引值
         res@mpInlandWaterFillColor = 0

         res@gsnDraw        = False
         res@gsnFrame       = False
         plot = gsn_csm_map(wks,res)
      ;;;;;;;;添加5条短线;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         resl               = True
         resl@gsFillColor   = "red"
         resl@gsLineThicknessF= 10.0
         resl@tfPolyDrawOrder = "Draw"  ; this can be used for polylines, polymarkers, or polygons

         nwx= fspan(40,41,101)
         nwy= fspan(85,90,101)
         nex= fspan(43,44,101)
         ney= fspan(115,120,101)
         tpx= fspan(30,31,101)
         tpy= fspan(90,95,101)
         cex= fspan(30,31,101)
         cey= fspan(110,115,101)
         sex= fspan(23,24,101)
         sey= fspan(105,110,101)
         plot0 = gsn_add_polyline(wks,plot,nwx,nwy,resl)
         plot1 = gsn_add_polyline(wks,plot,nex,ney,resl)
         plot2 = gsn_add_polyline(wks,plot,tpx,tpy,resl)
         plot3 = gsn_add_polyline(wks,plot,cex,cey,resl)
         plot4 = gsn_add_polyline(wks,plot,sex,sey,resl)
         draw(plot)
         frame(wks)
         end

图显示如下:

                               
登录/注册后可看大图


密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-9-15 16:32:51 | 显示全部楼层
经纬度全部颠倒了,比如:
nwx= fspan(40,41,101)
nwy= fspan(85,90,101)
另外,如果画直线,直接指定起始坐标就好,不用把中间的点都生成出来。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-9-15 18:29:55 | 显示全部楼层
longlivehj 发表于 2014-9-15 16:32
经纬度全部颠倒了,比如:
nwx= fspan(40,41,101)
nwy= fspan(85,90,101)

是啊,我写反了。准备改成:
nwy=(/40,40/)
nwx=(/85,90/)
这样应该可以的吧?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-9-15 18:34:26 | 显示全部楼层
yuqianhao0315 发表于 2014-9-15 18:29
是啊,我写反了。准备改成:
nwy=(/40,40/)
nwx=(/85,90/)

嗯,可以。
你原来代码里面,第二个纬度是41
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-9-15 19:50:16 | 显示全部楼层
longlivehj 发表于 2014-9-15 18:34
嗯,可以。
你原来代码里面,第二个纬度是41

嗯嗯,道理我明白了。犯了这么笨的错误,嘿嘿,多谢指点~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-9-15 20:37:59 | 显示全部楼层
感谢分享。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2014-9-15 22:00:07 | 显示全部楼层

画地图的代码不是我原创的,哈哈,共同学习
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-12-10 22:53:21 | 显示全部楼层
太棒了,解决了我的问题
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-12-10 22:55:28 | 显示全部楼层
;添加短线
  resl               = True
  ; resl@gsFillColor   = "red"
  resl@gsLineColor = "green"
  resl@gsLineThicknessF= 8.0
  resl@tfPolyDrawOrder = "Draw"  ; this can be used for polylines, polymarkers, or polygons

  nwx= (/75.25,87.25,81.25,70.25,75.25/)
  nwy= (/27.75,22.25,16.75,23.75,27.75/)
  nwx1 = (/102.25,102.25,96.75,96.75,85.25,85.25,87.25,87.25,102.25/)
  nwy1 = (/32.75,27.25,27.25,25.75,25.75,27.25,27.25,32.75,32.75/)
plot0 = gsn_add_polyline(wks,map,nwx(:1),nwy(:1),resl) ;map为要添加折线的图形
  plot1 = gsn_add_polyline(wks,map,nwx(1:2),nwy(1:2),resl)
  plot2 = gsn_add_polyline(wks,map,nwx(2:3),nwy(2:3),resl)
  plot3 = gsn_add_polyline(wks,map,nwx(3:4),nwy(3:4),resl)
  plot_0 = gsn_add_polyline(wks,map,nwx1(:1),nwy1(:1),resl)
  plot_1 = gsn_add_polyline(wks,map,nwx1(1:2),nwy1(1:2),resl)
  plot_2 = gsn_add_polyline(wks,map,nwx1(2:3),nwy1(2:3),resl)
  plot_3 = gsn_add_polyline(wks,map,nwx1(3:4),nwy1(3:4),resl)
  plot_4 = gsn_add_polyline(wks,map,nwx1(4:5),nwy1(4:5),resl)
  plot_5 = gsn_add_polyline(wks,map,nwx1(5:6),nwy1(5:6),resl)
  plot_6 = gsn_add_polyline(wks,map,nwx1(6:7),nwy1(6:7),resl)
  plot_7 = gsn_add_polyline(wks,map,nwx1(7:8),nwy1(7:8),resl)
  
  draw(map)
  frame(wks)
这样或许好一点点
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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