[ncl-talk] Bug in gsn_histogram

Mary Haley haley at ucar.edu
Tue Mar 3 14:54:53 MST 2015


Carl,

I'll have to look into this.  Thanks for taking the time to provide a fix.

It's also possible that the documentation was written incorrectly, because
I know I created several tests for the histogram binning routines, and the
change you are suggesting will likely change the results of the binning.

It does seem like the routine should be changed to meet the documentation,
however.

I'll keep you posted. The ticket for this is NCL-2167 for your reference.

--Mary


On Tue, Mar 3, 2015 at 7:00 AM, Carl Schreck <cjschrec at ncsu.edu> wrote:

> After some more testing, I figured out that it's a misalignment between
> the gsn_code and the documentation:
>
> http://www.ncl.ucar.edu/Document/Graphics/Resources/gsn.shtml#gsnHistogramBinIntervals
>
> It says that gsnHistogramBinIntervals of (/1,2,5,7/) would be binned as:
>
>   1 <= bin_1 <= 2
>   2 <  bin_2 <= 5
>   5 <  bin_3 <= 7
>
> But actually it's binning it as
>
>   1 <= bin_1 <  2
>   2 <= bin_2 <  5
>   5 <= bin_3 <= 7
>
> What I recommend is editing the code in compute_hist_vals in gsn_code.
> Change:
> ;
> ; Special tests for last interval are required.
> ;
>           if(i.eq.(nbars-1)) then
>             if(nbars.gt.1.and.new_binlocs(i).eq.new_binlocs(i-1)) then
>               num_in_bins(j,i) = num(x(j,:).gt.new_binlocs(i).and. \
>                                      x(j,:).le.new_binlocs(i+1))
>             else
>               num_in_bins(j,i) = num(x(j,:).ge.new_binlocs(i).and. \
>                                      x(j,:).le.new_binlocs(i+1))
>             end if
>           else
> ;
> ; If the previous interval was not really an interval, but an exact
> ; bin value, then be careful not to count those values in the current
> ; interval.
> ;
>             if(i.gt.0.and.new_binlocs(i).eq.new_binlocs(i-1)) then
>               num_in_bins(j,i) = num(x(j,:).gt.new_binlocs(i).and. \
>                                      x(j,:).lt.new_binlocs(i+1))
>             else
>               num_in_bins(j,i) = num(x(j,:).ge.new_binlocs(i).and. \
>                                      x(j,:).lt.new_binlocs(i+1))
>             end if
>           end if
>         end if
> ---------
> TO:
> ; If the previous interval was not really an interval, but an exact
> ; bin value, then be careful not to count those values in the current
> ; interval.
> ;
>           if(i.gt.0.and.new_binlocs(i).eq.new_binlocs(i-1)) then
>             num_in_bins(j,i) = num(x(j,:).gt.new_binlocs(i).and. \
>                                    x(j,:).lt.new_binlocs(i+1))
>           else
>             num_in_bins(j,i) = num(x(j,:).ge.new_binlocs(i).and. \
>                                    x(j,:).lt.new_binlocs(i+1))
>           end if
>         end if
> --------
> Essentially remove the special handling for the last bin. And then change
> the documentation to:
>
>   1 <= bin_1 <  2
>   2 <= bin_2 <  5
>   5 <= bin_3 <  7
>
> Let me know what you think of if you have further questions.
>
>     Carl
>
>
> On Mon, Mar 2, 2015 at 3:40 PM, Carl Schreck <cjschrec at ncsu.edu> wrote:
>
>> Sorry to come back with another binning issue, but I've found a similar
>> problem in gsn_histogram.
>>
>> This time, the problem only happens with the right-most bin, and only
>> when the data can equal the bin boundary, such as with integer data.
>>
>> Here's some simple sample code and a plot. Notice how in the first group
>> of figures, when the data is a float, the bars move seamlessly to the left
>> as the range increases.
>>
>> In the second half of the figures, the data are integer, and sometimes
>> will equal the top boundary. In this case, the rightmost bar changes before
>> as a new bar is added to its right.
>>
>> Let me know if you have any questions or suggestions. Thanks!
>>
>>     Carl
>>
>> --
>>
>> <http://www.cicsnc.org/>
>> <http://www.researcherid.com/rid/B-8711-2011>
>> * Cyclone <http://www.cyclonecenter.org/>*Center.org
>> <http://www.cyclonecenter.org/>  *Carl J. Schreck III, PhD*
>> *Research Associate*
>> Cooperative Institute for Climate and Satellites NC
>> <http://www.cicsnc.org/>
>> North Carolina State University <http://ncsu.edu/>
>> NOAA's National Climatic Data Center <http://ncdc.noaa.gov/>
>> 151 Patton Ave, Asheville, NC 28801
>> e: cjschrec at ncsu.edu
>> o: +1 828 257 3140
>> Publications
>> <http://scholar.google.com/citations?hl=en&user=th8ONEcAAAAJ&view_op=list_works&sortby=pubdate>
>> monitor.cicsnc.org/mjo
>>
>
>
>
> --
>
> <http://www.cicsnc.org/>
> <http://www.researcherid.com/rid/B-8711-2011>
> * Cyclone <http://www.cyclonecenter.org/>*Center.org
> <http://www.cyclonecenter.org/>  *Carl J. Schreck III, PhD*
> *Research Associate*
> Cooperative Institute for Climate and Satellites NC
> <http://www.cicsnc.org/>
> North Carolina State University <http://ncsu.edu/>
> NOAA's National Climatic Data Center <http://ncdc.noaa.gov/>
> 151 Patton Ave, Asheville, NC 28801
> e: cjschrec at ncsu.edu
> o: +1 828 257 3140
> Publications
> <http://scholar.google.com/citations?hl=en&user=th8ONEcAAAAJ&view_op=list_works&sortby=pubdate>
> monitor.cicsnc.org/mjo
>
> _______________________________________________
> ncl-talk mailing list
> 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/20150303/ff815b22/attachment.html 


More information about the ncl-talk mailing list