[ncl-talk] Scaling overlapping markers using xyMarkerSizes does not work
Brandon Fisel
bjfisel at gmail.com
Wed Nov 7 12:51:23 MST 2018
I have updated the code to use gsn_add_polymarker, which now appropriately
scales the marker sizes. However, there are now annoying lines connecting
(at random) some of the hollow circles. I would like to remove these lines.
Below is the code I added. Remove the last do loop that plots the data, and
insert the following between x = ispan(1,dmax,1) and frame(wks):
res at xyMarkerColor = "white"
plot = gsn_csm_xy(wks,x,cdata,res)
mkres = True
dum_fill = new((/nset,dmax/),graphic)
do i=0,nset-1
do j=0,dmax-1
mkres at gsMarkerIndex = markers(i)
mkres at gsMarkerSizeF = marker_size(i,j)
mkres at gsMarkerColor = colors(i,:)
; plot@$unique_string("dum")$ =
gsn_add_polymarker(wks,plot,x(j),cdata(i,j),mkres) ;works same as below
dum_fill(i,j) = gsn_add_polymarker(wks,plot,x(j),cdata(i,j),mkres)
end do
end do
draw(plot)
On Wed, Nov 7, 2018 at 12:24 PM Brandon Fisel <bjfisel at gmail.com> wrote:
> Hello,
>
> The below code is running on NCL version 6.4.
>
> I am attempting to adjust the marker sizes of hollow circles when they
> overlap on an XY plot. The "marker_size" variable in the script, is the
> algorithm that adjusts the marker sizes. Printing the marker_size output,
> shows the algorithm works correctly, placing into an array the adjusted
> marker sizes where the points will overlap.
>
> Unfortunately, the xyMarkerSizes is taking the first value in the array,
> as the marker size for that set. The resource information mentions
> xyMarkerSizes takes arrays for marker sizes, and that is not working.
>
> I have tested putting a static array of marker sizes, and that also does
> not work. Further, I have tested creating my own markers using
> NhlNewMarker, and this also is not working.
>
> How might I be able to adjust these marker sizes, so that if hollow
> circles overlap they adjust in size, allowing you to see each point?
>
> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
> ;*********************************************
> begin
> ; number of sets and values
> nset = 3
> nval = 30
> ; generate random data
> random_setallseed(36484749, 9494848)
> lo = 0
> hi = 10
> data = tointeger(random_uniform(lo, hi, (/nset, nval/)))
> med_data = dim_median(data) ;median of data
> ; persistent values > set median
> ; output at last persistent value
> per_val = new((/nset,nval/),float,-999.)
> i = 1 ;persistence counter
> do k=0,nset-1 ;loop over each set
> i = 1 ;reset persistence counter
> do n=1,nval-1
> if (data(k,n-1).gt.med_data(k)) then ;first value
> if (data(k,n).gt.med_data(k)) then ;every value after first
> FLAG = True ;closure flag to check (and output persistence)
> index at end of array
> i = i+1 ;iterate by 1
> if (n.eq.nval-1) then ;end of array check
> if (FLAG) then ;if at the end of array
> per_val(k,n) = i ;output index if persistence exists at end
> of array
> end if
> end if
> else
> per_val(k,n-1) = i ;output index at end of persistent value
> i = 1 ;reset index to 1 when persistence ends
> FLAG = False ;disable closure flag (not at end of array yet)
> end if
> end if
> end do
> end do
> ; largest bin (largest persistent period)
> dmax = tointeger(max(per_val)) ;needs to be scalar
> ; bin persistent periods
> cdata = new((/nset, dmax/),"float",-999.)
> j_array = ispan(1,dmax,1)
> do i=0,nset-1
> do j=0,dmax-1
> cdata(i,j) = num(per_val(i,:).eq.j_array(j))
> end do
> end do
> ; set 0 to FillValue
> ; for determination of unique values (for markes
> cdata at _FillValue = 0.
> ; set up plot
> wks = gsn_open_wks("pdf","example")
> cmap = read_colormap_file("cb_9step") ;color map for markers
> colors = cmap(38:40,:) ;3 colors centered about the middle of the cmap
> markers = (/4,4,4/) ;marker shapes (hollow circles)
> ; rescale marker sizes where they overlap
> ; increase scale by 0.002
> marker_size = new((/nset,nval/),"float")
> marker_size = 0.007 ;default marker size
> do i=0,dmax-1
> do j=1,nset-1
> marker_size(j,i) = marker_size(j,i) +
> num(cdata(:j-1,i).eq.cdata(j,i))*0.002
> end do
> end do
> res = True
> res at gsnDraw = False
> res at gsnFrame = False
> res at tiMainString = "Example plot"
> res at xyMarkLineModes = "Markers"
> res at tiXAxisString = "Bins"
> res at tiYAxisString = "Frequency"
> res at trXMinF = 0
> res at trXMaxF = dmax+1
> res at trYMinF = 0
> res at trYMaxF = max(cdata)+1
> res at tmLabelAutoStride = True
> res at xyMonoMarker = False
> res at xyMonoMarkerColor = False
> res at xyMonoMarkerSize = False
> ; loop over and plot each binned value
> x = ispan(1,dmax,1)
> do i=0,nset-1
> res at xyMarkers = markers(i)
> res at xyMarkerSizes = marker_size(i,:)
> ; res at xyMarkerColors = (/colors(i,:)/) ;this does not work
> res at xyMarkerColor= colors(i,:)
> if (i.eq.0) then
> plotA = gsn_csm_xy(wks,x,cdata(i,:),res)
> else
> plotB = gsn_csm_xy(wks,x,cdata(i,:),res)
> overlay(plotA,plotB)
> end if
> delete([/res at xyMarkers,res at xyMarkerSizes,res at xyMarkerColor/])
> end do
> draw(plotA)
> frame(wks)
> end
>
> Cheers,
>
> Brandon
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20181107/2e08a815/attachment.html>
More information about the ncl-talk
mailing list