[ncl-talk] Issue with creating a bar chart plot
Adam Phillips
asphilli at ucar.edu
Fri Jun 12 12:46:49 MDT 2020
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>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20200612/5dc1f046/attachment.html>
More information about the ncl-talk
mailing list