[ncl-talk] Attaching a map outside (or inside) of a plot

Alan Brammer abrammer at albany.edu
Fri Jul 10 11:55:07 MDT 2015


The problem here is that you're plotting all 4 locations on each
iteration.  Therefore you're only seeing the last iteration.

edited your code to make it executable,  with the solution here:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
wks = gsn_open_wks("x11","sample_plot")
lat2=(/23,35,19,25/)
lon2=(/-15,-25,-30,-35/)
colors2 = (/"yellow","blue","forestgreen","purple"/)  ;;  the indices were
similar in colour so used Mary's colours.
index2  = (/17,17,17,17/)
size2   = (/0.015,0.015,0.015,0.015/)*3

mpres = True
mpres at mpMinLatF = 10
mpres at mpMaxLatF = 40
mpres at mpMinLonF = -40
mpres at mpMaxLonF = -10
mpres at gsnDraw = False
mpres at gsnFrame = False

mkres               = True

;;;   draw and frame on each loop to see all 4 are being plotted each time.
map = gsn_csm_map(wks,mpres)
idd2   = new(4,graphic)
  do i=0,3
    mkres at gsMarkerIndex = index2(i)                     ; Filled circle
    mkres at gsMarkerSizeF = size2(i)
    mkres at gsMarkerColor := colors2(i)
    idd2(i) = gsn_add_polymarker(wks,map,lon2,lat2,mkres)
draw(map)
frame(wks)
end do


;;;   This time only add one marker at a time.
map = gsn_csm_map(wks,mpres)
idd2   = new(4,graphic)
  do i=0,3
    mkres at gsMarkerIndex = index2(i)                     ; Filled circle
    mkres at gsMarkerSizeF = size2(i)
    mkres at gsMarkerColor := colors2(i)
    idd2(i) = gsn_add_polymarker(wks,map,lon2(i),lat2(i),mkres)
  end do
draw(map)
frame(wks)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;





Alan.




On Fri, 10 Jul 2015 at 11:14 Mary Haley <haley at ucar.edu> wrote:

> It looks like you are doing everything correctly, because you have a
> unique id for every marker you add, and you are setting a different color
> every time.
>
> However, it's possible that the color indexes you've chosen all map to
> different variations of yellow in your current colormap. I would recommend,
> as a test, and also for "cleaner" code, to use named colors, rather than
> color indexes.
>
> For example, instead of:
>
>   colors2 = (/2,20,10,14/)
>
> try:
>
>   colors2 = (/"yellow","blue","forestgreen","purple"/)
>
> and let me know if you are still getting all yellow points. If you do, it
> would help if we could see the full code, and a sample plot.
>
> Thanks,
>
> --Mary
>
>
>
> On Fri, Jul 10, 2015 at 8:52 AM, Michele Petrini <mpetrini139 at yahoo.it>
> wrote:
>
>>  Dear helpdesk,
>> I apologize for replying to Mary only, my mistake.
>> I have another question, still related to add polymarkers to my map to
>> attach, in turn, outside of a plot. I am trying to add full circle to the
>> map, each one with a different color. This is the code I used;
>>
>>  plotxy1 =
>> gsn_csm_xy(wks,time,uplot1(:,:),res)                                    ;
>> Draw an XY plot.
>>
>>   mapannotation2 =
>> gsn_csm_contour_map(wks,Hicetfmask(24:125,120:220),res1)
>>
>>   lat2=(/lat(82,152),lat(99,144),lat(83,154),lat(97,147)/)
>>   lon2=(/lon(82,152),lon(99,144),lon(83,154),lon(97,147)/)
>>   colors2 = (/2,20,10,14/)
>>   index2  = (/17,17,17,17/)
>>   size2   = (/0.015,0.015,0.015,0.015/)
>>
>>   idd2   = new(4,graphic)
>>
>>   mkres               = True
>>
>>   do i=0,3
>>
>>   mkres at gsMarkerIndex = index2(i)                     ; Filled circle
>>   mkres at gsMarkerSizeF = size2(i)
>>   mkres at gsMarkerColor = colors2(i)
>>
>>   idd2(i) = gsn_add_polymarker(wks,mapannotation2,lon2,lat2,mkres)
>>
>>   end do
>>
>>   amres                        = True
>>   amres at amParallelPosF         = -0.55
>>   amres at amOrthogonalPosF       = 0.97
>>   amres at amJust                 = "BottomLeft"
>>
>>   map_final = gsn_add_annotation(plotxy1,mapannotation2,amres)
>>
>>   gsn_panel(wks,plotxy1,(/1,1/),False)
>>
>> What I get is four points in the correct positions and sizes, but all
>> equally colored (yellow). Again, I can't understand where my code is wrong.
>> Thank you.
>>
>> Michele
>>
>>
>> On 09/07/2015 20:10, Mary Haley wrote:
>>
>>  Hi Michele,
>>
>>  I'm CC-ing ncl-talk, as we prefer for people to post back to the list
>> rather than emailing developers individually.
>>
>>  Use gsn_add_text instead of gsn_text, in the same way you are using
>> gsn_add_polyline. Make sure you use a different id:
>>
>>  txid1 = gsn_add_text(wks,mapannotation,"A",lon(145,23),lat(145,23),tres)
>>
>> txid2 = gsn_add_text(wks,mapannotation,"B",lon(145,79),lat(145,79),tres)
>>
>>  ​--Mary
>>
>>>> On Thu, Jul 9, 2015 at 5:54 AM, Michele Petrini <mpetrini139 at yahoo.it>
>> wrote:
>>
>>>  Dear Mary,
>>> it works fine. Now I'm trying to add also two letters inside the legend
>>> plot (in order to label the polyline I drew), using the red code below;
>>>
>>> isoplot =
>>> gsn_csm_xy2(wks,xiso,brockplot1(25:77),icetplot1(25:77),resL,resR)
>>>
>>>   mapannotation =  gsn_csm_contour_map(wks,Hicetfmask(45:226,1:140),res1)
>>>
>>>   tres                   =  True
>>>   tres at txFontHeightF     = 0.01
>>>   tres at txFontColor       = "red"
>>>
>>>   gsn_text(wks,mapannotation,"A",lon(145,23),lat(145,23),tres)
>>>
>>>   gsn_text(wks,mapannotation,"B",lon(145,79),lat(145,79),tres)
>>>
>>>   ypts = (/lat(145,25),lat(145,77)/)
>>>   xpts = (/lon(145,25),lon(145,77)/)
>>>
>>>   res2                   = True
>>>    res2 at gsLineColor       = "red"
>>>   res2 at gsLineThicknessF  = 3.0
>>>
>>>   dum = new(1,graphic)
>>>   dum = gsn_add_polyline(wks,mapannotation,xpts(0:1),ypts(0:1),res2)
>>>
>>>   amres                        = True
>>>    amres at amParallelPosF         = -0.55
>>>   amres at amOrthogonalPosF       = 0.97
>>>   amres at amJust                 = "BottomLeft"
>>>
>>>   map_final = gsn_add_annotation(isoplot,mapannotation,amres)
>>>
>>>   resF               = True
>>>   resF at txString      = "Isostasy profile over LIS"
>>>   resF at txFont        = 21
>>>   resF at txFontHeightF = 0.03
>>>
>>>   gsn_panel(wks,isoplot,(/1,1/),resF)
>>>
>>> What I get is the two letters A, B inside the main XYY plot. I really
>>> can't get why...
>>>
>>> Thank you,
>>> Michele
>>>
>>>
>>>
>>> On 08/07/2015 18:11, Mary Haley wrote:
>>>
>>>  Michele,
>>>
>>>  I think the error might be coming from trying to panel the "id"
>>> created from calling gsn_add_annotation, rather than the actual plot. Try
>>> this:
>>>
>>>    gsn_panel(wks,isoplot,(/1,1/),False)
>>>
>>>  You might also look into maximize_output
>>>
>>>  --Mary
>>>
>>>
>>> On Wed, Jul 8, 2015 at 5:58 AM, Michele Petrini <mpetrini139 at yahoo.it>
>>> wrote:
>>>
>>>>  Dear helpdesk,
>>>> I am trying to attach a small map as a legend of a XY plot (with double
>>>> different Y axes). The map I need to attach must contain also a line, added
>>>> with gsn_add_polyline. The two single plots (the XYY plot and the map with
>>>> the polyline) are correct (I drew them separately first), but as I use
>>>> gsn_add_annotation I get the following error message:
>>>>
>>>>
>>>> fatal:Invalid plot ID=282 passed to NhlGetBB
>>>> warning:pmOverlaySequenceIds isn't a resource in this object
>>>> warning:NhlGetValues:Error retrieving pmOverlaySequenceIds
>>>> fatal:["Execute.c":8578]:Execute: Error occurred at or near line 1927
>>>> in file $NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl
>>>>
>>>> fatal:["Execute.c":8578]:Execute: Error occurred at or near line 6847
>>>> in file $NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl
>>>>
>>>> fatal:["Execute.c":8578]:Execute: Error occurred at or near line 7546
>>>> in file $NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl
>>>>
>>>> fatal:["Execute.c":8578]:Execute: Error occurred at or near line 647 in
>>>> file Exercise1.ncl
>>>>
>>>> Do you have any idea the reason why I get such an error? Here is the
>>>> code.
>>>>
>>>>
>>>> --------------------------------------------------------------------------------------------------------------------------------
>>>> ;***************************************set resources for the isostasy
>>>> plot (Left)
>>>>
>>>>   resL                        = True
>>>>
>>>>   resL at tiYAxisString          = "Variation in bedrock elevation (30-0
>>>> kyrs BP) (m)"
>>>>   resL at tiXAxisFontHeightF     = 0.02
>>>>   resL at tiYAxisFontHeightF     = 0.02
>>>>
>>>>   resL at xyLineColors           =
>>>> 20                                                   ; Define line colors.
>>>>   resL at xyLineThicknessF       =
>>>> 3.0                                                             ; Define
>>>> line thickness.
>>>>   resL at xyDashPattern =
>>>> 0                                                                        ;
>>>> Make curves all solid
>>>>
>>>>   resL at trYMaxF      = -150.
>>>>   resL at trYMinF      = -850.
>>>>
>>>>   resL at tmXTOn                 = False
>>>>
>>>>   resL at tmYLMinorOn            = False
>>>>   resL at tmYLLabelFont          = 21
>>>>   resL at tmYLLabelFontHeightF   = 0.02
>>>>
>>>>   resL at pmLegendDisplayMode    = "Always"
>>>>   resL at lgPerimOn              = False
>>>>   resL at xyExplicitLegendLabels = "Topography variation (m)"
>>>>   resL at pmLegendSide           = "Bottom"
>>>>   resL at pmLegendOrthogonalPosF = 0.01
>>>>   resL at pmLegendWidthF         = 0.4
>>>>   resL at pmLegendHeightF        = 0.04
>>>>
>>>>   resL at vpHeightF              = 0.4
>>>>   resL at vpWidthF               = 0.4
>>>>
>>>>
>>>>   resL at lgAutoManage = False
>>>>   resL at tmXBMode               =
>>>> "Explicit"
>>>> ; Define your own tick mark labels.
>>>>   ;resL at tmXBLabelFont          =
>>>> 21
>>>> ; Change font of labels.
>>>>   ;resL at tmXBLabelFontHeightF   = 0.02
>>>>   resL at tmXBMinorOn            =
>>>> False
>>>> ; No minor tick marks.
>>>>   resL at tmXBValues             =
>>>> (/xiso(0),xiso(52)/)
>>>> ; Location to put tick mark labels
>>>>   resL at tmXBLabels             = (/"A","B"/)
>>>>
>>>>   resL at gsnDraw                = False                   ; do not draw
>>>> picture
>>>>   resL at gsnFrame               = False                   ; do not
>>>> advance frame
>>>>
>>>>
>>>> ;******************************************set resources for ice
>>>> thickness plot (right)
>>>>
>>>>    resR                        = True
>>>>
>>>>    resR at tiYAxisString          = "Variation in ice thickness (30-0
>>>> kyrs BP) (m)"
>>>>    resR at tiXAxisFontHeightF     = 0.02
>>>>    resR at tiYAxisFontHeightF     = 0.02
>>>>
>>>>    resR at xyLineColors           =
>>>> 21
>>>> ; Define line colors.
>>>>    resR at xyLineThicknessF       =
>>>> 3.0
>>>> ; Define line thickness.
>>>>    resR at xyDashPattern          =
>>>> 1
>>>> ; Make curves all solid
>>>>
>>>>    resR at trYMaxF      = 3100
>>>>    resR at trYMinF      = 600
>>>>
>>>>    resR at tmXBOn                 = False
>>>>    resR at tmXTOn                 = False
>>>>
>>>>    resR at tmYRMinorOn            = False
>>>>    resR at tmYRLabelFont          = 21
>>>>    resR at tmYRLabelFontHeightF   = 0.02
>>>>
>>>>    resR at vpHeightF              = 0.4
>>>>    resR at vpWidthF               = 0.4
>>>>
>>>>
>>>>    resR at pmLegendDisplayMode    = "Always"
>>>>    resR at lgPerimOn              = False
>>>>    resR at xyExplicitLegendLabels = "Ice thickness variation (m)"
>>>>    resR at pmLegendSide           = "Bottom"
>>>>    resR at pmLegendOrthogonalPosF = 0.06
>>>>    resR at pmLegendWidthF         = 0.4
>>>>    resR at pmLegendHeightF        = 0.04
>>>>    resR at lgAutoManage = False
>>>>    resR at gsnDraw                = False                   ; do not draw
>>>> picture
>>>>    resR at gsnFrame               = False                   ; do not
>>>> advance frame
>>>>
>>>>
>>>> ;******************************************set resources for legend plot
>>>>   res1          = True
>>>>   res1 at gsnDraw  = False
>>>>   res1 at gsnFrame = False
>>>>
>>>>
>>>>   res1 at mpLimitMode            = "Corners"            ; choose range of
>>>> map
>>>>   res1 at mpLeftCornerLatF       = lat(41,1)
>>>>   res1 at mpLeftCornerLonF       = lon(41,1)
>>>>   res1 at mpRightCornerLatF      = lat(226,139)
>>>>   res1 at mpRightCornerLonF      = lon(226,139)
>>>>
>>>>   res1 at mpProjection           = "LambertEqualArea"
>>>>   res1 at mpCenterLatF           = 90
>>>>   res1 at mpCenterLonF           = 0
>>>>   res1 at mpOutlineOn            = True
>>>>   res1 at tfDoNDCOverlay         = True
>>>>
>>>>   res1 at cnFillOn               = True
>>>>   res1 at cnLevelSelectionMode   = "ManualLevels"
>>>>   res1 at cnMinLevelValF         = 0
>>>>   res1 at cnMaxLevelValF         = 5000
>>>>   res1 at cnLevelSpacingF        = 50
>>>>   res1 at gsnDraw                = False                  ; do not draw
>>>> picture
>>>>   res1 at gsnFrame               = False                  ; do not
>>>> advance frame
>>>>
>>>>   res1 at cnLinesOn              = False                  ;  contour lines
>>>>   res1 at cnLineLabelsOn         = False                  ; no contour
>>>> labels
>>>>   res1 at gsnSpreadColors        = True                   ; use total
>>>> colormap
>>>>   res1 at gsnSpreadColorStart    = 2
>>>>   res1 at gsnSpreadColorEnd      = 27
>>>>   res1 at cnInfoLabelOn          = False                  ; no contour
>>>> info (right bottom)
>>>>   res1 at lbLabelBarOn = False
>>>>
>>>>   res1 at vpHeightF              = 0.2
>>>>   res1 at vpWidthF               = 0.2
>>>>
>>>> ;****************************************************end resources
>>>>
>>>>   isoplot =
>>>> gsn_csm_xy2(wks,xiso,brockplot1(25:77),icetplot1(25:77),resL,resR)
>>>>
>>>>   mapannotation =
>>>> gsn_csm_contour_map(wks,Hicetfmask(45:226,1:140),res1)
>>>>
>>>>   ypts = (/lat(145,25),lat(145,77)/)
>>>>   xpts = (/lon(145,25),lon(145,77)/)
>>>>
>>>>   res2                   = True
>>>>   res2 at gsLineColor       = "black"
>>>>   res2 at gsLineThicknessF  = 3.0
>>>>   res2 at gsLineLabelString = "A B"
>>>>
>>>>   dum = new(1,graphic)
>>>>   dum = gsn_add_polyline(wks,mapannotation,xpts(0:1),ypts(0:1),res2)
>>>>
>>>>   amres                        = True
>>>>   amres at amParallelPosF         = -1.15
>>>>   amres at amOrthogonalPosF         = -0.4
>>>>   amres at amJust                 = "CenterLeft"
>>>>
>>>>   map_final = gsn_add_annotation(isoplot,mapannotation,amres)
>>>>
>>>>   gsn_panel(wks,map_final,(/1,1/),False)
>>>>
>>>>   delete(resL)
>>>>   delete(resR)
>>>>   delete(res1)
>>>>   delete(res2)
>>>>   delete(amres)
>>>>
>>>> ----------------------------------------------------------------------------------------------------------------------------------
>>>>
>>>> Thank you for you help,
>>>>
>>>> Michele
>>>>
>>>> --
>>>>
>>>> ***
>>>> Michele Petrini
>>>>
>>>> Ph.D. student in Earth Science and Fluid Mechanics
>>>>
>>>> Università degli studi di Trieste,
>>>> Dipartimento di Matematica e Geoscienze
>>>> Palazzina C - via Weiss 1, 34128 Trieste, Italy
>>>>
>>>> Email: mpetrini139 at yahoo.it
>>>> Skype: michele.petrins
>>>> Mobile: +39 3398367372
>>>>
>>>>
>>>> _______________________________________________
>>>> ncl-talk mailing list
>>>> ncl-talk at ucar.edu
>>>> List instructions, subscriber options, unsubscribe:
>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>
>>>>
>>>
>>> --
>>>
>>> ***
>>> Michele Petrini
>>>
>>> Ph.D. student in Earth Science and Fluid Mechanics
>>>
>>> Università degli studi di Trieste,
>>> Dipartimento di Matematica e Geoscienze
>>> Palazzina C - via Weiss 1, 34128 Trieste, Italy
>>>
>>> Email: mpetrini139 at yahoo.it
>>> Skype: michele.petrins
>>> Mobile: +39 3398367372
>>>
>>>
>>
>> --
>>
>> ***
>> Michele Petrini
>>
>> Ph.D. student in Earth Science and Fluid Mechanics
>>
>> Università degli studi di Trieste,
>> Dipartimento di Matematica e Geoscienze
>> Palazzina C - via Weiss 1, 34128 Trieste, Italy
>>
>> Email: mpetrini139 at yahoo.it
>> Skype: michele.petrins
>> Mobile: +39 3398367372
>>
>>
>> _______________________________________________
>> ncl-talk mailing list
>> ncl-talk at ucar.edu
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>
>>
> _______________________________________________
> 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/20150710/6ba8c0b8/attachment.html 


More information about the ncl-talk mailing list