[ncl-talk] Scaling overlapping markers using xyMarkerSizes does not work
Brandon Fisel
bjfisel at gmail.com
Wed Nov 7 11:24:00 MST 2018
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/dc2f6cb2/attachment.html>
More information about the ncl-talk
mailing list