[ncl-talk] Fw: map tickmarks
Rashed Mahmood
rashidcomsis at gmail.com
Mon Mar 9 03:06:17 MDT 2020
Hi Chathurika,
I do not think that there are any issues with lat/long labels. Note that
these labels are in degrees and minutes format. If you convert 30minutes
into fractional part of degrees that would be 0.5.
Does this make sense?
Cheers,
Rashed
On Mon, Mar 9, 2020 at 6:44 AM Chathurika via ncl-talk <ncl-talk at ucar.edu>
wrote:
>
>
>
> -----Original Messages-----
> *From:*Chathurika <chatu at scsio.ac.cn>
> *Sent Time:*2020-03-09 13:40:37 (Monday)
> *To:* ncl-talk at ucar.edu
> *Cc:*
> *Subject:* map tickmarks
>
>
> Hello,
>
> I draw the map in southern part of Sri Lanka. But tickmarks are wrong. It
> displays .3 instead .5. The drew map and code are attached herewith. Please
> help me to overcome this issue.
>
> Best Regards,
> Chathu
>
> ;load "$NCARG_ROOT/lib/ncarg/database/rangs"
>
> undef("add_map_tickmarks2")
> function add_map_tickmarks2(wks,plot,res)
> local res2, bres, vpx, vpy, vpw, vph, xndc, yndc, npts, n, j, nlat, \
> nlon, delta, bot_lon, top_lon, lft_lat, rgt_lat, xblabels, xbvalues, \
> xtlabels, xtvalues, yllabels, ylvalues, yrlabels, yrvalues, xfix, \
> xlat, xlon, yfix, annoid, anno_str
> begin
> ;---Make a copy of the original resource list.
> res2 = res
>
> ;---Retrieve edges of plot in NDC space.
> getvalues plot
> "vpXF" : vpx
> "vpYF" : vpy
> "vpWidthF" : vpw
> "vpHeightF" : vph
> end getvalues
>
> ;---Turn off tickmarks associated with map. We want to add our own.
> setvalues plot
> "pmTickMarkDisplayMode" : "Never"
> end setvalues
>
> ;---Initialize resources for tickmark plot. User shouldn't change these.
> bres = True
> bres at vpXF = vpx
> bres at vpYF = vpy
> bres at vpWidthF = vpw
> bres at vpHeightF = vph
> bres at trXMinF = vpx
> bres at trXMaxF = vpx + vpw
> bres at trYMinF = vpy - vph
> bres at trYMaxF = vpy
> bres at tmEqualizeXYSizes = True
>
> ;---This resource the user can change in main code if desired.
> bres at gsnTickMarksPointOutward =
> get_res_value(res2,"gsnTickMarksPointOutward",True)
>
> ;
> ; NDC Points to scan on X and Y axes. These arrays will be used to
> ; find the closest NDC pair that gets us close to the location where
> ; we want a tickmark.
> ;
> npts = 100000 ; Increase to get closer match for tickmarks
> xndc = fspan(vpx,vpx+vpw,npts)
> yndc = fspan(vpy-vph,vpy,npts)
>
> n = dimsizes(yndc)
> xfix = new(n,float)
> yfix = new(n,float)
> xlon = new(n,float)
> xlat = new(n,float)
> delta = 0.001
>
> ;---Left axis tickmarks
> if(isatt(res2,"tmYLValues")) then
> lft_lat = get_res_value(res2,"tmYLValues",-1)
> nlat = dimsizes(lft_lat)
> ylvalues = new(nlat,float)
> yllabels = new(nlat,string)
> xfix = vpx + 0.0001 ; Just a smidge into the plot to make sure we
> don't
> ; get missing values returned.
> ;
> ; Loop across each left latitude value that we want a tickmark for,
> ; and try to find the closest X,Y NDC coordinate pair along this axis.
> ;
> NhlNDCToData(plot,xfix,yndc,xlon,xlat)
> do j=0,dimsizes(lft_lat)-1
> NhlNDCToData(plot,xfix,yndc,xlon,xlat)
> ii = minind(fabs(xlat-lft_lat(j)))
> if(.not.any(ismissing(ii)).and.fabs(xlat(ii)-lft_lat(j)).le.delta)
> yllabels(j) = fabs(lft_lat(j)) + ""
> ylvalues(j) = yndc(ii(0))
> if(lft_lat(j).lt.0) then
> yllabels(j) = yllabels(j) + "~S~o~N~S"
> end if
> if(lft_lat(j).gt.0) then
> yllabels(j) = yllabels(j) + "~S~o~N~N"
> end if
> end if
> delete(ii)
> end do
> bres at tmYLMode = "Explicit"
> bres at tmYLValues = ylvalues
> bres at tmYLLabels = get_res_value(res2,"tmYLLabels",yllabels)
> else
> bres at tmYLOn = False
> bres at tmYLLabelsOn = False
> end if
>
> ;---Right axis tickmarks
> if(isatt(res2,"tmYRValues")) then
> rgt_lat = get_res_value(res2,"tmYRValues",-1)
> nlat = dimsizes(rgt_lat)
> yrvalues = new(nlat,float)
> yrlabels = new(nlat,string)
>
> xfix = vpx + vpw - 0.0001 ; Just a smidge into the plot to make sure
> we don't
> ; get missing values returned.
> ;
> ; Loop across each right latitude value that we want a tickmark for,
> ; and try to find the closest X,Y NDC coordinate pair along this axis.
> ;
> do j=0,dimsizes(rgt_lat)-1
> NhlNDCToData(plot,xfix,yndc,xlon,xlat)
> ii = minind(fabs(xlat-rgt_lat(j)))
> if(.not.any(ismissing(ii)).and.fabs(xlat(ii)-rgt_lat(j)).le.delta)
> yrlabels(j) = fabs(rgt_lat(j)) + ""
> yrvalues(j) = yndc(ii(0))
> if(rgt_lat(j).lt.0) then
> yrlabels(j) = yrlabels(j) + "~S~o~N~S"
> end if
> if(rgt_lat(j).gt.0) then
> yrlabels(j) = yrlabels(j) + "~S~o~N~N"
> end if
> end if
> delete(ii)
> end do
> bres at tmYROn = True
> bres at tmYRLabelsOn = True
> bres at tmYUseLeft = False
> bres at tmYRMode = "Explicit"
> bres at tmYRValues = yrvalues
> bres at tmYRLabels = get_res_value(res2,"tmYRLabels",yrlabels)
> else
> bres at tmYUseLeft = False
> bres at tmYROn = False
> bres at tmYRLabelsOn = False
> end if
>
> ;---Top axis tickmarks
> if(isatt(res2,"tmXTValues")) then
> top_lon = get_res_value(res2,"tmXTValues",-1)
> nlon = dimsizes(top_lon)
> xtvalues = new(nlon,float)
> xtlabels = new(nlon,string)
>
> yfix = vpy - 0.0001 ; Just a smidge into the plot to make sure we
> don't
> ; get missing values returned.
> ;
> ; Loop across each top longitude value that we want a tickmark for,
> ; and try to find the closest X,Y NDC coordinate pair along this axis.
> ;
> do j=0,dimsizes(top_lon)-1
> NhlNDCToData(plot,xndc,yfix,xlon,xlat)
> ii = minind(fabs(xlon-top_lon(j)))
> if(.not.any(ismissing(ii)).and.fabs(xlon(ii)-top_lon(j)).le.delta)
> xtlabels(j) = fabs(top_lon(j)) + ""
> xtvalues(j) = xndc(ii(0))
> if(top_lon(j).lt.0) then
> xtlabels(j) = xtlabels(j) + "~S~o~N~W"
> end if
> if(top_lon(j).gt.0) then
> xtlabels(j) = xtlabels(j) + "~S~o~N~E"
> end if
> end if
> delete(ii)
> end do
> bres at tmXTOn = True
> bres at tmXTLabelsOn = True
> bres at tmXUseBottom = False
> bres at tmXTMode = "Explicit"
> bres at tmXTValues = xtvalues
> bres at tmXTLabels = get_res_value(res2,"tmXTLabels",xtlabels)
> else
> bres at tmXUseBottom = False
> bres at tmXTOn = False
> bres at tmXTLabelsOn = False
> end if
>
> ;---Bottom axis tickmarks
> if(isatt(res2,"tmXBValues")) then
> bot_lon = get_res_value(res2,"tmXBValues",-1)
> nlon = dimsizes(bot_lon)
> xbvalues = new(nlon,float)
> xblabels = new(nlon,string)
>
> yfix = vpy-vph + 0.0001 ; Just a smidge into the plot to make sure
> ; we don't get missing values returned.
> ;
> ; Loop across each bottom longitude value that we want a tickmark for,
> ; and try to find the closest X,Y NDC coordinate pair along this axis.
> ;
> do j=0,dimsizes(bot_lon)-1
> NhlNDCToData(plot,xndc,yfix,xlon,xlat)
> ii = minind(fabs(xlon-bot_lon(j)))
> if(.not.any(ismissing(ii)).and.fabs(xlon(ii)-bot_lon(j)).le.delta)
> xblabels(j) = fabs(bot_lon(j)) + ""
> xbvalues(j) = xndc(ii(0))
> if(bot_lon(j).lt.0) then
> xblabels(j) = xblabels(j) + "~S~o~N~W"
> end if
> if(bot_lon(j).gt.0) then
> xblabels(j) = xblabels(j) + "~S~o~N~E"
> end if
> end if
> delete(ii)
> end do
> bres at tmXBMode = "Explicit"
> bres at tmXBValues = xbvalues
> bres at tmXBLabels = get_res_value(res2,"tmXBLabels",xblabels)
> else
> bres at tmXBOn = False
> bres at tmXBLabelsOn = False
> end if
>
> ;
> ; Now that we are done figuring out where to put tickmarks, and
> ; what labels to use, get any "tm" resources that might have been
> ; set by the user, and create a blank plot with thes new tickmarks.
> ;
>
> ;---Get rest of user resources that were set with "tm".
> bres = get_res_eq(res2,"tm")
>
> bres = True ; Above call will set bres to True if no "tm" resources, so
> ; make sure it is True still.
>
> bres at gsnDraw = False
> bres at gsnFrame = False
>
> ;
> ; Create blank plot with new tickmarks (don't use gsn_csm_blank_plot,
> ; because it wants to scale the size of your X and Y axes.)
> ;
> blank = gsn_blank_plot(wks,bres)
>
> ;
> ; Attach new tickmarks to original plot. This will allow resizing
> ; if desired. The default is to attach one plot to the center of
> ; the other one. These two plots are already the same size.
> ;
> annoid = gsn_add_annotation(plot,blank,False)
>
> ;
> ; Be sure to return the annotation id, otherwise the
> ; tickmarks will disappear.
> ;
> anno_str = unique_string("annoid")
> plot@$anno_str$ = annoid
>
> return(plot)
> end
>
> ;;;;........................................
>
>
> begin
>
> setfileoption("nc", "MissingToFillValue", False)
>
> fY=addfile("bathy_indianO.nc","r")
> vNames = getfilevarnames (fY)
> print(vNames)
>
>
> topo=fY->TOPO2(0,{4:11},{76:86})
>
> printVarSummary(topo)
>
>
> f1 = addfile("UV_hr_mean-150-02.nc", "r")
> Vn1 = getfilevarnames(f1)
> print(Vn1)
>
> zonal =f1->zonal(:,1)
> printVarSummary(zonal)
>
> depth=f1->lev
> print(depth)
>
>
> merid =f1->merid(:,1)
>
> printVarSummary(merid)
> latitude =f1->lat
> print(latitude)
>
> printVarSummary(latitude)
> longitude =f1->lon
> print(longitude)
> printVarSummary(longitude)
>
>
> f2 = addfile("UV_hr_mean-150-05.nc", "r")
> Vn2 = getfilevarnames(f2)
> print(Vn2)
>
> east =f2->zonal(:,1)
>
>
> printVarSummary(east)
> north =f2->merid(:,1)
>
> printVarSummary(north)
> lat =f2->lat
> print(lat)
>
> printVarSummary(lat)
>
> lon =f2->lon
> print(lon)
> printVarSummary(lon)
>
> f3 = addfile("UV_hr_mean-75-05.nc", "r")
> Vn3 = getfilevarnames(f2)
> print(Vn3)
>
> east3 =f3->zonal(:,1)
>
>
> printVarSummary(east3)
> north3 =f3->merid(:,1)
>
> printVarSummary(north3)
> lat3 =f3->lat
>
> printVarSummary(lat)
> lon3 =f3->lon
>
> printVarSummary(lon3)
>
>
> print(lon3(99))
> print(lat3(99))
>
>
> wks=gsn_open_wks("png", "chathu-150")
>
> res=True
> res at gsnMaximize=True
> res at vpWidthF=2.5
> res at vpHeightF=2
>
> res at gsnDraw=False
> res at gsnFrame=False
>
>
> res at tiMainString=""
> res at gsnLeftString=""
>
>
> res at cnFillOn=True
> res at cnFillPalette="MPL_terrain"
> res at cnLinesOn=True
> res at cnInfoLabelOn=False
> res at cnLineLabelsOn=True
> res at cnLineLabelPlacementMode="constant"
> res at cnConstFLabelFontHeightF=0.005
>
> res at tmXBLabelJust="CenterCenter"
> res at tmXBLabelAngleF=0.
> res at lbLabelBarOn = False
>
>
> res at gsnAddCyclic=False
>
>
> res at pmTickMarkDisplayMode = "Always"
>
>
>
> res at mpPerimOn=False
> res at mpGridAndLimbOn = False
>
>
>
> res at mpOutlineOn= True
> res at mpOutlineBoundarySets = "NoBoundaries" ; turn on country
> boundaries
> res at mpOutlineSpecifiers = (/"Continents"/)
>
> res at mpGeophysicalLineColor = "Black" ; color of cont.
> outlines
> res at mpGeophysicalLineThicknessF = 2.5 ; thickness of outlines
>
>
> res at mpFillDrawOrder="Draw"
> res at mpLimitMode="Corners"
> res at mpLeftCornerLatF=5
> res at mpRightCornerLatF=8
> res at mpLeftCornerLonF=79
> res at mpRightCornerLonF=83
>
> res at mpProjection="Mercator"
>
>
>
> res at mpDataSetName = "Earth..4" ; choose most recent
> boundaries
> res at mpDataBaseVersion = "HighRes"
>
> res at mpGeophysicalLineThicknessF= 2.5
> res at mpNationalLineThicknessF= 2.5
> delete(res at mpOutlineSpecifiers)
> res at mpOutlineSpecifiers = (/"Sri Lanka (Ceylon)"/)
>
>
>
> plot=gsn_csm_contour_map(wks, topo, res)
>
> txres=True
> txres at txFontHeightF=0.012
> txres at txFont="helvetica-bold"
> txres at txJust="TopLeft"
>
> chres = True
> chres at gsMarkerIndex=1
> chres at gsMarkerSizeF=0.08
> chres at gsMarkerColor="salmon"
> chres at tfPolyDrawOrder = "PostDraw"
> chres at gsLineColor="salmon"
> chres at gsLineThicknessF=9.0
> chres at gsFillColor="black"
>
>
> plres = True
> plres at gsMarkerIndex=1
> plres at gsMarkerSizeF=0.08
> plres at gsMarkerColor="red"
> plres at tfPolyDrawOrder = "PostDraw"
> plres at gsLineColor="red"
> plres at gsLineThicknessF=9.0
> plres at gsFillColor="black"
>
> dum6 = gsn_add_polyline(wks, plot, lon3, lat3, chres)
> dum2 = gsn_add_polyline(wks, plot, longitude, latitude, plres)
> dum3 = gsn_add_polyline(wks, plot, lon, lat, plres)
>
>
> mkres = True
> mkres at gsMarkerIndex = 16 ; Filled circle
> mkres at gsMarkerSizeF = 0.025
> mkres at gsMarkerColor = "turquoise1"
> dum4 = gsn_add_polymarker(wks, plot, longitude(0), latitude(0) ,mkres)
> mres = True
> mres at gsMarkerIndex = 16 ; Filled circle
> mres at gsMarkerSizeF = 0.025
> mres at gsMarkerColor = "yellow"
> mres at tfPolyDrawOrder = "PostDraw"
> dum5 = gsn_add_polymarker(wks, plot, lon(41), lat(41), mres)
>
> cres = True
> cres at gsMarkerIndex = 16 ; Filled circle
> cres at gsMarkerSizeF = 0.025
> cres at gsMarkerColor = "seagreen1"
> cres at tfPolyDrawOrder = "PostDraw"
> dum7 = gsn_add_polymarker(wks, plot, lon3(99), lat3(99), cres)
>
> cres=True
> cres at txFontColor="black"
> cres at txFontThicknessF=0.6
> cres at txFontHeightF=0.025
>
>
> sl=gsn_add_text(wks, plot, "Sri Lanka", 81.2, 7.3, cres)
>
> in=gsn_add_text(wks, plot, "Indian Ocean", 82.3, 5.25, cres)
>
> draw(plot)
> frame(wks)
>
> end
>
>
>
>
>
> best regards,
> Chathu
> --
>
>
>
> Wickramage Chathurika Hemamali
> Msc in Physical Oceanography
> State Key Laboratory of Tropical Oceanography
> South China Sea Institute of Oceanology
> University of Chinese Academy of Science
> China
>
> *Specialized in Oceanography and Marine Geology (Bachelor)*
> *University of Ruhuna*
> *Matara*
> *Sri Lanka*
>
> Email : wickramagechathurika at rocketmail.com
> chatu at scsio.ac.cn
>
>
> --
>
>
>
> Wickramage Chathurika Hemamali
> Msc in Physical Oceanography
> State Key Laboratory of Tropical Oceanography
> South China Sea Institute of Oceanology
> University of Chinese Academy of Science
> China
>
> *Specialized in Oceanography and Marine Geology (Bachelor)*
> *University of Ruhuna*
> *Matara*
> *Sri Lanka*
>
> Email : wickramagechathurika at rocketmail.com
> chatu at scsio.ac.cn
>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20200309/57e16873/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: chathu-150.000002.png
Type: image/png
Size: 37953 bytes
Desc: not available
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20200309/57e16873/attachment.png>
More information about the ncl-talk
mailing list