[ncl-talk] Issue with creating a bar chart plot

Andrew Kren - NOAA Affiliate andrew.kren at noaa.gov
Fri Jun 12 12:53:22 MDT 2020


Ok, thanks! I'll give it a try.

On Fri, Jun 12, 2020 at 2:47 PM Adam Phillips <asphilli at ucar.edu> wrote:

> Hi Andrew,
> Yes, gsn_add_polyline should avoid the issue. Give it a try.
> Adam
>
> On Fri, Jun 12, 2020 at 12:22 PM Andrew Kren - NOAA Affiliate <
> andrew.kren at noaa.gov> wrote:
>
>> Hi Adam,
>>
>> Thanks! So what you are saying is that it is probably better to use
>> gsn_add_polyline to avoid this issue? I was aware of the polyline feature,
>> but was hoping to not change...guess that is the best option. Thanks!
>>
>> On Fri, Jun 12, 2020 at 12:22 PM Adam Phillips <asphilli at ucar.edu> wrote:
>>
>>> Hi Andrew,
>>> Jumping in late here, and I might be off base, but you can draw as many
>>> lines as you want by using gsn_add_polyline:
>>>
>>> https://www.ncl.ucar.edu/Document/Graphics/Interfaces/gsn_add_polyline.shtml
>>>
>>> Functionality that depends on setting a reference line would be affected
>>> by this though. I would try setting one reference line, and then using
>>> gsn_add_polyline to draw the rest.
>>> Hope that helps!
>>> Adam
>>>
>>> On Fri, Jun 12, 2020 at 9:50 AM Andrew Kren - NOAA Affiliate via
>>> ncl-talk <ncl-talk at mailman.ucar.edu> wrote:
>>>
>>>> All,
>>>>
>>>> I was able to reproduce the error that Rick found with the reference
>>>> line. Is there any way to fix this by still having a reference line?
>>>>
>>>> On Tue, Jun 9, 2020 at 5:07 PM Andrew Kren - NOAA Affiliate <
>>>> andrew.kren at noaa.gov> wrote:
>>>>
>>>>> Thanks Rick! Hmm, that is interesting. Could it be that I used an
>>>>> array of reference lines? This would make some sense as the previous NCL
>>>>> version I used was 6.5 and didn't upgrade the newer version until last
>>>>> year. I'll try to dig on my end as well.
>>>>>
>>>>> On Tue, Jun 9, 2020 at 9:39 AM Rick Brownrigg <brownrig at ucar.edu>
>>>>> wrote:
>>>>>
>>>>>> (back online)
>>>>>>
>>>>>> Hi Andrew,
>>>>>>
>>>>>> The errors have to do indirectly with the reference line; If I remove
>>>>>> those resources, I get a histogram without error messages being thrown. I
>>>>>> was able to track precisely where in the code things go awry, however I do
>>>>>> not understand the logic leading up to that point, so I really don't know
>>>>>> what is the real problem. I unfortunately do not have time to dig into this
>>>>>> at the level it would require to understand this code (oh for an
>>>>>> interactive ncl debugger).
>>>>>>
>>>>>> There were some changes to gsn_csm.ncl that dealt with reference
>>>>>> lines around the 2017-2018 time frame, but they seem to be minor and not
>>>>>> directly related to the code where the miscalculation of box widths occurs,
>>>>>> so again, its hard to tell.
>>>>>>
>>>>>> I wish I had a better answer
>>>>>> Rick
>>>>>>
>>>>>> On Tue, Jun 9, 2020 at 5:46 AM Andrew Kren - NOAA Affiliate <
>>>>>> andrew.kren at noaa.gov> wrote:
>>>>>>
>>>>>>> Hi Rick,
>>>>>>>
>>>>>>> Here is a functioning code. I just saved the plotting section and
>>>>>>> made my own test array, giving the same error. I know I don't need to
>>>>>>> convert to integer in my min and max calculation but that shouldn't matter.
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> On Mon, Jun 8, 2020 at 10:05 PM Rick Brownrigg <brownrig at ucar.edu>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Offline for the moment -- Andrew if you can send me the data and a
>>>>>>>> functionally complete script, I'll try to dig into it deeper.
>>>>>>>>
>>>>>>>> On Mon, Jun 8, 2020 at 6:31 PM Andrew Kren - NOAA Affiliate <
>>>>>>>> andrew.kren at noaa.gov> wrote:
>>>>>>>>
>>>>>>>>> Hi ncl-talk, Dave, and Rick,
>>>>>>>>>
>>>>>>>>> I took both of your guys' advice and here is what I found. I first
>>>>>>>>> removed tolong but that did not fix it. I then tried dong rounding, as well
>>>>>>>>> as not doing any conversion, but that still resulted in the error. Then I
>>>>>>>>> tried commenting out the defining of the bar chart width, but it still came
>>>>>>>>> up with the same error:
>>>>>>>>>
>>>>>>>>> (0) get_bar_arrays: Fatal: The array is not monotonically
>>>>>>>>> increasing.
>>>>>>>>>
>>>>>>>>> (0) Cannot draw a bar chart.
>>>>>>>>>
>>>>>>>>> fatal:Illegal right-hand side type for assignment
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Here is what I have for my plot section:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> outfile = "fcst_efuuyr3wd6_top_1_" + (i)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> length1 = temperature_top(i,0:23)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  wks = gsn_open_wks("eps",outfile)  ; send graphics to PNG file
>>>>>>>>>
>>>>>>>>>  res = True
>>>>>>>>>
>>>>>>>>>  res at gsnScale = True
>>>>>>>>>
>>>>>>>>>  res at gsnFrame = False
>>>>>>>>>
>>>>>>>>>  res at gsnDraw = True
>>>>>>>>>
>>>>>>>>> ; these four resources allow the user to stretch the plot size, and
>>>>>>>>>
>>>>>>>>> ; decide exactly where on the page to draw it.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  ;res at gsnMaximize = True
>>>>>>>>>
>>>>>>>>>   res at vpXF = 0.01            ; In page coordinates, where to start
>>>>>>>>>
>>>>>>>>>   res at vpYF = 0.9  ; 0.75            ; the plot
>>>>>>>>>
>>>>>>>>>   res at vpHeightF = 0.27            ; Changes the aspect ratio
>>>>>>>>>
>>>>>>>>>   res at vpWidthF  = 0.97
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  x_axis = ispan(4,73,3)
>>>>>>>>>
>>>>>>>>>  x_axis at _FillValue = 999
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>   res at tiMainString  = names_14ers(i) + " 3-Day Forecast (Peak: "
>>>>>>>>> + hgts_14ers_str(i) + " ft)"
>>>>>>>>>
>>>>>>>>>   res at gsnXYBarChart = True            ; Create bar plot
>>>>>>>>>
>>>>>>>>>   res at tiMainOffsetYF = 0.006
>>>>>>>>>
>>>>>>>>>   res at tiMainFontHeightF = 0.02
>>>>>>>>>
>>>>>>>>>  res at tmXTMode       = "Explicit" ; Define own tick mark labels.
>>>>>>>>>
>>>>>>>>>  res at tmXTValues     = x_axis
>>>>>>>>>
>>>>>>>>>  res at tmXTOn         = False             ; turn on the top
>>>>>>>>> tickmarks
>>>>>>>>>
>>>>>>>>>  res at tmXBOn         = False
>>>>>>>>>
>>>>>>>>>  res at tmYROn         = False
>>>>>>>>>
>>>>>>>>>  res at tmYRMinorOn    = False
>>>>>>>>>
>>>>>>>>>  res at tmYLOn         = False
>>>>>>>>>
>>>>>>>>>  res at tmYLMinorOn    = False
>>>>>>>>>
>>>>>>>>>  res at tmXTMinorOn    = False
>>>>>>>>>
>>>>>>>>>  res at gsnXRefLine = (/26.5,50.5/)
>>>>>>>>>
>>>>>>>>>  res at gsnXRefLineColor = (/"gray40","gray40"/)
>>>>>>>>>
>>>>>>>>>  res at gsnXRefLineDashPatterns = (/2,2/)
>>>>>>>>>
>>>>>>>>>  res at gsnXRefLineThicknesses = (/1.05,1.05/)
>>>>>>>>>
>>>>>>>>>  res at tiYAxisOffsetXF = 0.035
>>>>>>>>>
>>>>>>>>>  res at tiYAxisString = "Temperature"
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>   res at tiYAxisFontHeightF = 0.014
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> range_temp = ( tofloat( max(tolong(temperature_top(i,0:23))) -
>>>>>>>>> min(tolong(temperature_top(i,0:23)))))
>>>>>>>>>
>>>>>>>>> max_temp = tofloat(max(tolong(temperature_top(i,0:23)))) +
>>>>>>>>> (tofloat(max(tolong(temperature_top(i,0:23))) -
>>>>>>>>> min(tolong(temperature_top(i,0:23))))) * 0.8
>>>>>>>>>
>>>>>>>>> min_temp = tofloat(min(tolong(temperature_top(i,0:23)))) -
>>>>>>>>> (tofloat(max(tolong(temperature_top(i,0:23))) -
>>>>>>>>> min(tolong(temperature_top(i,0:23))))) * 0.1
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  res at trYMaxF         = max_temp   ; max value on y-axis
>>>>>>>>>
>>>>>>>>>  res at trYMinF         = min_temp
>>>>>>>>>
>>>>>>>>> ; res at gsnXYBarChartBarWidth = 0.75                 ; change bar
>>>>>>>>> widths 0.75 originally
>>>>>>>>>
>>>>>>>>>  res at gsnXYBarChartColors = "Orange"
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  ; draw 5 separate temperature plots so can make figure big
>>>>>>>>>
>>>>>>>>>  res at trXMinF               = 0                    ; adds space on
>>>>>>>>> either end
>>>>>>>>>
>>>>>>>>>  res at trXMaxF               =  75                    ; of the 1st
>>>>>>>>> and last bars
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> plot = gsn_csm_xy(wks,x_axis,temperature_top(i,0:23),res)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> My x_axis values are: 4 to 73 by 3
>>>>>>>>>
>>>>>>>>> My temperature_top values are:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> (0) 14
>>>>>>>>>
>>>>>>>>> (1) 11
>>>>>>>>>
>>>>>>>>> (2) 11
>>>>>>>>>
>>>>>>>>> (3) 12
>>>>>>>>>
>>>>>>>>> (4) 14
>>>>>>>>>
>>>>>>>>> (5) 21
>>>>>>>>>
>>>>>>>>> (6) 24
>>>>>>>>>
>>>>>>>>> (7) 23
>>>>>>>>>
>>>>>>>>> (8) 23
>>>>>>>>>
>>>>>>>>> (9) 22
>>>>>>>>>
>>>>>>>>> (10) 23
>>>>>>>>>
>>>>>>>>> (11) 26
>>>>>>>>>
>>>>>>>>> (12) 33
>>>>>>>>>
>>>>>>>>> (13) 36
>>>>>>>>>
>>>>>>>>> (14) 33
>>>>>>>>>
>>>>>>>>> (15) 28
>>>>>>>>>
>>>>>>>>> (16) 25
>>>>>>>>>
>>>>>>>>> (17) 25
>>>>>>>>>
>>>>>>>>> (18) 25
>>>>>>>>>
>>>>>>>>> (19) 29
>>>>>>>>>
>>>>>>>>> (20) 38
>>>>>>>>>
>>>>>>>>> (21) 41
>>>>>>>>>
>>>>>>>>> (22) 39
>>>>>>>>>
>>>>>>>>> (23) 35
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I don't understand why the error could still be happening.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>>
>>>>>>>>> On Mon, Jun 8, 2020 at 1:40 PM Dave Allured - NOAA Affiliate <
>>>>>>>>> dave.allured at noaa.gov> wrote:
>>>>>>>>>
>>>>>>>>>> Andrew,
>>>>>>>>>>
>>>>>>>>>> In the face of unknown behavior, I would try a couple things.
>>>>>>>>>> First, go back to your original code without my previous suggestion of
>>>>>>>>>> reversing the axes.  That was based on a wrong assumption.
>>>>>>>>>>
>>>>>>>>>> 1.  I do not understand the purpose of "tolong" here.  Data type
>>>>>>>>>> "long" is normally used only for special purposes in NCL, and there is a
>>>>>>>>>> chance it is causing trouble.  Also, "tolong" would reduce plot accuracy by
>>>>>>>>>> integer truncation.  Try simply removing "tolong", and use
>>>>>>>>>> temperature_top(i,0:23) directly in the function call.  Tofloat, todouble,
>>>>>>>>>> or toint would be safer alternatives if a conversion function is really
>>>>>>>>>> needed.  If you really want integer rounding here, then you should use the
>>>>>>>>>> round function to reduce roundoff error.
>>>>>>>>>>
>>>>>>>>>> 2.  Try completely isolating the plot function from the rest of
>>>>>>>>>> the program.  Write the X and Y arrays to a small Netcdf file.  Print (res)
>>>>>>>>>> and manually recode the printed results into new NCL code lines in a small
>>>>>>>>>> new test program.  Omit all "res" attributes that are not relevant for this
>>>>>>>>>> plot type.  Read the Netcdf file, then call open_wks and gsn_csm_xy, and
>>>>>>>>>> see if the problem remains.  This way, at least you end up with a small
>>>>>>>>>> reproducer and small data that you can send to the mailing list.  HTH.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Mon, Jun 8, 2020 at 7:17 AM Rick Brownrigg <brownrig at ucar.edu>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> I took a quick look at the code. As the errors indicate, it's
>>>>>>>>>>> happening in a function call get_bart_width(). The calculation of the
>>>>>>>>>>> variable "delta" is clearly wrong, and that sets off the warning, and
>>>>>>>>>>> triggers the error later in get_bar_arrays about non-monotonicity (it's
>>>>>>>>>>> actually not that the array is non-monotonic, it's that it has negative
>>>>>>>>>>> widths).
>>>>>>>>>>>
>>>>>>>>>>> Beyond that, I can not tell why the calculation is wrong,
>>>>>>>>>>> particularly without the data. That part of the code hasn't changed in some
>>>>>>>>>>> years, so the v6.5.0 vs v6.6.2 difference is a mystery.
>>>>>>>>>>>
>>>>>>>>>>> FWIW...
>>>>>>>>>>> Rick
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Sun, Jun 7, 2020 at 6:58 PM Andrew Kren - NOAA Affiliate via
>>>>>>>>>>> ncl-talk <ncl-talk at mailman.ucar.edu> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> I looked into these things. My x_axis is simply created this
>>>>>>>>>>>> way:
>>>>>>>>>>>>
>>>>>>>>>>>> x_axis = ispan(4,73,3)
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> And the printed values are correct, increasing by 3 starting at
>>>>>>>>>>>> 4, 7, etc.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> So this is still kinda confusing as to why.
>>>>>>>>>>>>
>>>>>>>>>>>> On Sun, Jun 7, 2020 at 5:41 PM Dave Allured - NOAA Affiliate <
>>>>>>>>>>>> dave.allured at noaa.gov> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> It is only the horizontal axis that needs to be monotonically
>>>>>>>>>>>>> increasing.  That is probably what the error message is about.  Naturally,
>>>>>>>>>>>>> the vertical access may fluctuate anywhere.  You might want to check the
>>>>>>>>>>>>> values of x_axis in your code to see if they make sense.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Meanwhile, you should be able to insert a quick fix for x_axis
>>>>>>>>>>>>> with temporary arrays, something like this.  This assumes that x_axis is
>>>>>>>>>>>>> strictly decreasing rather than increasing.  If you change the order, then
>>>>>>>>>>>>> you must also change the order for the vertical axis data, in the same
>>>>>>>>>>>>> way.  X and Y values are supposed to form ordered pairs to make the bar
>>>>>>>>>>>>> chart.
>>>>>>>>>>>>>
>>>>>>>>>>>>> xplot = x_axis(::-1)
>>>>>>>>>>>>> yplot = tolong (temperature_top(i,23:0:-1))
>>>>>>>>>>>>> plot = gsn_csm_xy (wks, xplot, yplot, res)
>>>>>>>>>>>>>
>>>>>>>>>>>>> I have no idea what changed to cause a newer NCL version to
>>>>>>>>>>>>> change from the original behavior.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Sun, Jun 7, 2020 at 1:57 PM Andrew Kren - NOAA Affiliate
>>>>>>>>>>>>> via ncl-talk <ncl-talk at mailman.ucar.edu> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Dear ncl-talk,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I upgraded my NCL to the latest version. Previously I was
>>>>>>>>>>>>>> using version 6.5. When I upgraded, one of my ncl codes no longer runs
>>>>>>>>>>>>>> successfully but creates an error code. I am creating a bar chart with
>>>>>>>>>>>>>> gsn_csm_xy. I originally did not get these errors so I am unsure what could
>>>>>>>>>>>>>> be going on. I tried to debug the issue but to no avail. Here are my errors:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> (0) get_bar_widths: Warning: The bar width(s) you selected
>>>>>>>>>>>>>> (0.75) is larger than the smallest delta (-11).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> (0) Defaulting to -11.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> (0) get_bar_arrays: Fatal: The array is not monotonically
>>>>>>>>>>>>>> increasing.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> (0) Cannot draw a bar chart.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> fatal:Illegal right-hand side type for assignment
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I checked that my array I am plotting has all correct values,
>>>>>>>>>>>>>> and it does. I didn't know a bar chart had to have monotonically increasing
>>>>>>>>>>>>>> values. Is there a way around this?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> The code where it fails is below, in the call to plot.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> plot =
>>>>>>>>>>>>>> gsn_csm_xy(wks,x_axis,tolong(temperature_top(i,0:23)),res)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> Andrew Kren
>>>>>>>>>>>>>> Meteorologist
>>>>>>>>>>>>>> US Dept of Commerce
>>>>>>>>>>>>>> National Oceanic and Atmospheric Administration
>>>>>>>>>>>>>> National Weather Service Raleigh, NC
>>>>>>>>>>>>>> 1005 Capability Drive, Suite 300
>>>>>>>>>>>>>> Centennial Campus
>>>>>>>>>>>>>> Raleigh, NC 27606-5226
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Andrew Kren
>>>>>>>>> Meteorologist
>>>>>>>>> US Dept of Commerce
>>>>>>>>> National Oceanic and Atmospheric Administration
>>>>>>>>> National Weather Service Raleigh, NC
>>>>>>>>> 1005 Capability Drive, Suite 300
>>>>>>>>> Centennial Campus
>>>>>>>>> Raleigh, NC 27606-5226
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Andrew Kren
>>>>>>> Meteorologist
>>>>>>> US Dept of Commerce
>>>>>>> National Oceanic and Atmospheric Administration
>>>>>>> National Weather Service Raleigh, NC
>>>>>>> 1005 Capability Drive, Suite 300
>>>>>>> Centennial Campus
>>>>>>> Raleigh, NC 27606-5226
>>>>>>>
>>>>>>>
>>>>>
>>>>> --
>>>>> Andrew Kren
>>>>> Meteorologist
>>>>> US Dept of Commerce
>>>>> National Oceanic and Atmospheric Administration
>>>>> National Weather Service Raleigh, NC
>>>>> 1005 Capability Drive, Suite 300
>>>>> Centennial Campus
>>>>> Raleigh, NC 27606-5226
>>>>>
>>>>>
>>>>
>>>> --
>>>> Andrew Kren
>>>> Meteorologist
>>>> US Dept of Commerce
>>>> National Oceanic and Atmospheric Administration
>>>> National Weather Service Raleigh, NC
>>>> 1005 Capability Drive, Suite 300
>>>> Centennial Campus
>>>> Raleigh, NC 27606-5226
>>>>
>>>> _______________________________________________
>>>> ncl-talk mailing list
>>>> ncl-talk at mailman.ucar.edu
>>>> List instructions, subscriber options, unsubscribe:
>>>> https://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>
>>>
>>>
>>> --
>>> Adam Phillips
>>> Associate Scientist,  Climate and Global Dynamics Laboratory, NCAR
>>> www.cgd.ucar.edu/staff/asphilli/   303-497-1726
>>>
>>> <http://www.cgd.ucar.edu/staff/asphilli>
>>>
>>
>>
>> --
>> Andrew Kren
>> Meteorologist
>> US Dept of Commerce
>> National Oceanic and Atmospheric Administration
>> National Weather Service Raleigh, NC
>> 1005 Capability Drive, Suite 300
>> Centennial Campus
>> Raleigh, NC 27606-5226
>>
>>
>
> --
> Adam Phillips
> Associate Scientist,  Climate and Global Dynamics Laboratory, NCAR
> www.cgd.ucar.edu/staff/asphilli/   303-497-1726
>
> <http://www.cgd.ucar.edu/staff/asphilli>
>


-- 
Andrew Kren
Meteorologist
US Dept of Commerce
National Oceanic and Atmospheric Administration
National Weather Service Raleigh, NC
1005 Capability Drive, Suite 300
Centennial Campus
Raleigh, NC 27606-5226
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20200612/f37287e1/attachment.html>


More information about the ncl-talk mailing list