[ncl-talk] Fewer questions about a Histogram Plot

Adam Phillips asphilli at ucar.edu
Tue Nov 21 10:49:43 MST 2017


Hi Barry,
Perhaps more emphasis should indeed be added on the histogram page that the
gsn_histogram function bins the data itself, but note that under the
description section on the gsn_histogram function page it states:
This function draws a histogram plot, where values in the given data are
binned into equally-spaced intervals. The intervals will be selected for
you, based on the range of the data, unless you set the
*gsnHistogramBinIntervals*
<http://www.ncl.ucar.edu/Document/Graphics/Resources/gsn.shtml#gsnHistogramBinIntervals>
resource
to the desired list of interval values.
http://www.ncl.ucar.edu/Document/Graphics/Interfaces/gsn_histogram.shtml

For the record: I disagree with this statement: "I believe that the
examples you have on the site do not necessarily (as is) plot histograms
typically drawn in meteorological papers"
I think you are disagreeing with the fact that the gsn_histogram function
bins data for you. To me, that is the best part of the gsn_histogram
function. However, in my opinion it is not terribly easy to modify the plot
generated by gsn_histogram, so I've shifted to using gsn_histogram to bin
my values, and then using gsn_csm_xy to draw my histogram via bars. This
gives me complete control over the resulting plot and I don't have to code
up the binning.

Here's an example of mine that does this:

  hres = True
  hres at gsnDraw = False
  hres at gsnFrame = False
  hres at gsnHistogramBinIntervals = fspan(-8,8.,17)
  plot = gsn_histogram(wks,ctl,hres)
  ctl_h = plot at NumInBins*1.
  ctl_h!0 = "time"
  ctl_h&time = hres at gsnHistogramBinIntervals
(:dimsizes(hres at gsnHistogramBinIntervals)-2)+((hres at gsnHistogramBinIntervals
(1)-hres at gsnHistogramBinIntervals(0))/2.)
  delete(plot)

  res = True
  res at gsnYRefLine = 0.0
  res at gsnXRefLineThicknessF = 3.0
  res at gsnXYBarChart = True
  res at trYMinF = 0.0
  res at xyLineThicknessF = 3.5
  res at gsnXYBarChartColors = (/"black"/)
  res at xyCurveDrawOrder = "Draw"

  res at trXMinF = min(hres at gsnHistogramBinIntervals)
  res at trXMaxF = max(hres at gsnHistogramBinIntervals)
  res at tmXBMinorValues = hres at gsnHistogramBinIntervals
  res at gsnXYBarChartBarWidth = ctl_h&time(1) - ctl_h&time(0)          ;
change bar widths
  res at trYMaxF = max((/max(ctl_h),max(feedback_h)/))+1
  plot2 = gsn_csm_xy(wks,ctl_h&time,ctl_h,res)

Note that I do not draw/frame plot, and only draw/frame plot2. The above
code would have to be modified to fit what you are doing, but the basics
are there for you to draw on.
Hope that helps!
Adam



On Tue, Nov 21, 2017 at 10:32 AM, Barry Lynn <barry.h.lynn at gmail.com> wrote:

> Just to add:
>
> The bar graph page says:
>
> Bar charts (in this context) are simply XY plots that are drawn with bars
> for each X,Y point. To get bars instead of curves when using *gsn_csm_xy*
> <https://www.ncl.ucar.edu/Document/Graphics/Interfaces/gsn_csm_xy.shtml>,
> set the special attribute res@*gsnXYBarChart*
> <https://www.ncl.ucar.edu/Document/Graphics/Resources/gsn.shtml#gsnXYBarChart> =
> True.
>
> There is a separate page for creating histograms
> <https://www.ncl.ucar.edu/Applications/histo.shtml>, where the data is
> binned according to ranges of values or actual values.
>
> It may be that I can use bar charts to make graphs directly.  However, it
> is written that "data is binned according to ranges of values or actual
> values."
>
> Maybe it needs to be clear that the histogram program will bin the data
> provided; i.e., it is not expecting to receive already binned data.
> Lastly, I did want to plot the bars within ranges, and I am not sure if the
> bar graph can do this or not.
>
> Barry
>
>
>
>
> On Tue, Nov 21, 2017 at 7:23 PM, Barry Lynn <barry.h.lynn at gmail.com>
> wrote:
>
>> Hi Mary:
>>
>> That's my point.  The histogram program is taking the data and binning it.
>>
>> However, I've already binned the data, and the data itself already
>> represents the number of data points within each interval.
>>
>> I am not sure if bar charts would help or not.  I would need to look more
>> closely, but when I looked before it didn't seem to solve my problem (but I
>> was less experienced before).
>>
>> Barry
>>
>> On Tue, Nov 21, 2017 at 7:14 PM, Mary Haley <haley at ucar.edu> wrote:
>>
>>> Hi Barry,
>>>
>>> I don't understand your question. When you say "I originally tried to
>>> just plot the data in mod_x and obs_x using the standard examples it didn't
>>> work."  In what way did it not work?  Can you provide your data and a
>>> script so I can see what you mean?
>>>
>>> You shouldn't need to count the values in each range because
>>> gsn_histogram does that for you.
>>>
>>> For example, here's a 5-line script that draws a very basic histogram.
>>>
>>>   y = (/3.1,0.5,3.8,3.4,2.1,1.5,2.6,2.3,3.6,1.7/)
>>>   wks = gsn_open_wks("png","hist")
>>>   res = True
>>>   res at gsnHistogramBinIntervals = (/0,1,2,3,4/)
>>>   plot = gsn_histogram(wks,y,res)
>>>
>>> Note I used intervals of (0,1,2,3,4)
>>>
>>> You should see a histogram with four bars:
>>>
>>>   First bar  = 1 b/c we have one value    >=0 and < 1
>>>   Second bar = 2 b/c we have two values   >=1 and < 2
>>>   Third bar  = 3 b/c we have three values >=2 and < 3
>>>   Fourth bar = 4 b/c we have four values  >=3 and <=4
>>>
>>> Note the last bar is special, because it contains all values
>>> less-than-or-equal-to the last interval.
>>>
>>> We do have a single meteogram example, and several bar chart examples,
>>> if you simply want to draw bars instead of XY plots.
>>>
>>> See:
>>>
>>> http://www.ncl.ucar.edu/Applications/bar.shtml
>>> http://www.ncl.ucar.edu/Applications/meteo.shtml
>>>
>>> --Mary
>>>
>>>
>>>
>>> On Tue, Nov 21, 2017 at 7:08 AM, Barry Lynn <barry.h.lynn at gmail.com>
>>> wrote:
>>>
>>>> Mary:
>>>>
>>>> Thank you for the suggestions yesterday.  The histogram looks okay now.
>>>>
>>>> I'd like to bring to your attention a couple of things.
>>>>
>>>> 1) I believe that the examples you have on the site do not necessarily
>>>> (as is) plot histograms typically drawn in meteorological papers. For
>>>> instance, when I originally tried to just plot the data in mod_x and obs_x
>>>> using the standard examples it didn't work.  For this reason, I created
>>>> intervals of data whose index is the interval value and the number of times
>>>> the index value appears is equal the value of the data (obs_x or obs_y)
>>>> within.
>>>>
>>>> For instance, if there is an interval with 10001 grids with dBZ values
>>>> (radar reflectivity) within this interval then that index will have 10001
>>>> values, all equal to the value of the index.
>>>>
>>>> 2) I do this with this loop and am wondering if there is an more
>>>> concise way to write it.
>>>>
>>>>   i_num = 0
>>>>
>>>>   i_end = 0
>>>>
>>>>   i_beg = 0
>>>>
>>>>   do i_int = 0,dims_obs_x-1
>>>>
>>>>   i_end = i_beg + floattointeger(obs_x(i_int))
>>>>
>>>>   do x_int = i_beg,i_end-1
>>>>
>>>>   x_new(i_num) = i_int
>>>>
>>>>   i_num = i_num + 1
>>>>
>>>>   end do
>>>>
>>>>   if (i_beg.eq.i_end)then
>>>>
>>>>    x_new(i_num) = i_int
>>>>
>>>>    i_num = i_num + 1
>>>>
>>>>   end if
>>>>
>>>>   i_beg = i_end
>>>>
>>>>   end do
>>>>
>>>>
>>>> 3) If I take your program and substitute my data (num_x) at the top I
>>>> get the strange figure attached (00002.png).  We're I to put this data into
>>>> a typical graphing program, the data would come out correctly as
>>>> histo_mod.pdf.
>>>>
>>>>
>>>> Perhaps I've overlooked something?
>>>>
>>>>
>>>> Thanks,
>>>>
>>>>
>>>> Barry
>>>>
>>>> On Mon, Nov 20, 2017 at 7:19 PM, Mary Haley <haley at ucar.edu> wrote:
>>>>
>>>>> Barry,
>>>>>
>>>>> You don't want to use discrete bin intervals, unless you are wanting
>>>>> to count the # of values *exactly equal* to a value.
>>>>>
>>>>> For a range of values, use gsnHistogramBinIntervals.
>>>>>
>>>>> Please read over the histogram page carefully, because we have many
>>>>> examples on this page that talk about the different histogram options.
>>>>>
>>>>> As I think I mentioned before, I updated example histo_2.ncl to show
>>>>> how to explicitly request an array of bin intervals.
>>>>>
>>>>> Run the attached script, will hopefully illustrate the difference
>>>>> between gsnHistogramBinIntervals and gsnHistogramDiscreteBinValues.
>>>>>
>>>>> --Mary
>>>>>
>>>>>
>>>>> On Mon, Nov 20, 2017 at 8:54 AM, Barry Lynn <barry.h.lynn at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Hello:
>>>>>>
>>>>>> I found the coding lines that allows me to map the number of
>>>>>> intervals, explicitly.  I found the coding lines that allow me to specify
>>>>>> how many of the labels I want to map.
>>>>>>
>>>>>> That's here:
>>>>>>
>>>>>> https://www.ncl.ucar.edu/Applications/Scripts/histo_3.ncl
>>>>>>
>>>>>>  res at tmXBLabelStride                = 2     ; every other x-label
>>>>>>   res at gsnHistogramDiscreteBinValues  = ispan(0,25,1)
>>>>>>
>>>>>> However, I don't see how to change the number of labels to be
>>>>>> different from their default number, which equals the number of tmXBValues.
>>>>>>
>>>>>> I need to set the latter so that I can add more than 9 labels.
>>>>>>
>>>>>> Thank you
>>>>>>
>>>>>>
>>>>>> (0) res at tmXBLabels = -9
>>>>>>
>>>>>> (1) res at tmXBLabels = 0
>>>>>>
>>>>>> (2) res at tmXBLabels = 9
>>>>>>
>>>>>> (3) res at tmXBLabels = 18
>>>>>>
>>>>>> (4) res at tmXBLabels = 27
>>>>>>
>>>>>> (5) res at tmXBLabels = 36
>>>>>>
>>>>>> (6) res at tmXBLabels = 45
>>>>>>
>>>>>> (7) res at tmXBLabels = 54
>>>>>>
>>>>>> (8) res at tmXBLabels = 63
>>>>>>
>>>>>> (0) tmXBValues = 0.0555556
>>>>>>
>>>>>> (1) tmXBValues = 0.166667
>>>>>>
>>>>>> (2) tmXBValues = 0.277778
>>>>>>
>>>>>> (3) tmXBValues = 0.388889
>>>>>>
>>>>>> (4) tmXBValues = 0.5
>>>>>>
>>>>>> (5) tmXBValues = 0.611111
>>>>>>
>>>>>> (6) tmXBValues = 0.722222
>>>>>>
>>>>>> (7) tmXBValues = 0.833333
>>>>>>
>>>>>> (8) tmXBValues = 0.944444
>>>>>>
>>>>>> On Mon, Nov 20, 2017 at 3:01 PM, Barry Lynn <barry.h.lynn at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi:
>>>>>>>
>>>>>>> I can get the labels to display correctly if I use:
>>>>>>>
>>>>>>> res at tmXBLabels = int_radar(::3)
>>>>>>>
>>>>>>>
>>>>>>> However, the histogram program is amalgamating the smaller bins into
>>>>>>> 10 sized default bins.
>>>>>>>
>>>>>>>
>>>>>>> I would hope that there is a way to explicitly tell the histogram
>>>>>>> program to use all the interval data (23 intervals.
>>>>>>>
>>>>>>>
>>>>>>> I tried setting:
>>>>>>>
>>>>>>>
>>>>>>> res at tmXBMode        = "Manual"
>>>>>>>
>>>>>>> and creating manual tick marks, but then my histogram labels go only
>>>>>>> from 0 to 1.
>>>>>>>
>>>>>>>
>>>>>>> As below.
>>>>>>>
>>>>>>>
>>>>>>>  rad_inc = 3./(int_radar(dimsizes(int_radar)-1)+10)
>>>>>>>
>>>>>>>   print("rad_inc  = " +rad_inc)
>>>>>>>
>>>>>>>   new_ticks = new(dimsizes(int_radar),float)
>>>>>>>
>>>>>>>   new_ticks(0)= 0
>>>>>>>
>>>>>>>   do inc = 1,dimsizes(int_radar)-1,1
>>>>>>>
>>>>>>>    new_ticks(inc) = new_ticks(inc-1)+rad_inc
>>>>>>>
>>>>>>>   end do
>>>>>>>
>>>>>>>   print("new_ticks = " + new_ticks)
>>>>>>>
>>>>>>>   res at tmXBValues := new_ticks
>>>>>>>
>>>>>>>   res at tmXBLabels := int_radar
>>>>>>>
>>>>>>> On Sun, Nov 19, 2017 at 9:21 PM, Barry Lynn <barry.h.lynn at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi:
>>>>>>>>
>>>>>>>> I am having trouble figuring out why my histo.ncl program won't
>>>>>>>> plot data beyond value (x-axis) of 15.  This is really dbz data, so the
>>>>>>>> range is correct: -9 to 60.
>>>>>>>>
>>>>>>>> I also checked that the labels are present in:
>>>>>>>>
>>>>>>>> res at tmXBLabels = int_radar
>>>>>>>>
>>>>>>>>
>>>>>>>> and the data dimensions are correct (23 elements).
>>>>>>>>
>>>>>>>> However, I don't see any data (and any labels 18-60) indicating
>>>>>>>> that the data has all been displayed.
>>>>>>>>
>>>>>>>> Thank you,
>>>>>>>>
>>>>>>>> Barry
>>>>>>>>
>>>>>>>> --
>>>>>>>> Barry H. Lynn, Ph.D
>>>>>>>> Senior Lecturer,
>>>>>>>> The Institute of the Earth Science,
>>>>>>>> The Hebrew University of Jerusalem,
>>>>>>>> Givat Ram, Jerusalem 91904, Israel
>>>>>>>> Tel: 972 547 231 170
>>>>>>>> Fax: (972)-25662581
>>>>>>>>
>>>>>>>> C.E.O, Weather It Is, LTD
>>>>>>>> Weather and Climate Focus
>>>>>>>> http://weather-it-is.com
>>>>>>>> Jerusalem, Israel
>>>>>>>> Local: 02 930 9525
>>>>>>>> Cell: 054 7 231 170
>>>>>>>> Int-IS: x972 2 930 9525
>>>>>>>> US 914 432 3108 <(914)%20432-3108>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Barry H. Lynn, Ph.D
>>>>>>> Senior Lecturer,
>>>>>>> The Institute of the Earth Science,
>>>>>>> The Hebrew University of Jerusalem,
>>>>>>> Givat Ram, Jerusalem 91904, Israel
>>>>>>> Tel: 972 547 231 170
>>>>>>> Fax: (972)-25662581
>>>>>>>
>>>>>>> C.E.O, Weather It Is, LTD
>>>>>>> Weather and Climate Focus
>>>>>>> http://weather-it-is.com
>>>>>>> Jerusalem, Israel
>>>>>>> Local: 02 930 9525
>>>>>>> Cell: 054 7 231 170
>>>>>>> Int-IS: x972 2 930 9525
>>>>>>> US 914 432 3108 <(914)%20432-3108>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Barry H. Lynn, Ph.D
>>>>>> Senior Lecturer,
>>>>>> The Institute of the Earth Science,
>>>>>> The Hebrew University of Jerusalem,
>>>>>> Givat Ram, Jerusalem 91904, Israel
>>>>>> Tel: 972 547 231 170
>>>>>> Fax: (972)-25662581
>>>>>>
>>>>>> C.E.O, Weather It Is, LTD
>>>>>> Weather and Climate Focus
>>>>>> http://weather-it-is.com
>>>>>> Jerusalem, Israel
>>>>>> Local: 02 930 9525
>>>>>> Cell: 054 7 231 170
>>>>>> Int-IS: x972 2 930 9525
>>>>>> US 914 432 3108 <(914)%20432-3108>
>>>>>>
>>>>>> _______________________________________________
>>>>>> ncl-talk mailing list
>>>>>> ncl-talk at ucar.edu
>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Barry H. Lynn, Ph.D
>>>> Senior Lecturer,
>>>> The Institute of the Earth Science,
>>>> The Hebrew University of Jerusalem,
>>>> Givat Ram, Jerusalem 91904, Israel
>>>> Tel: 972 547 231 170
>>>> Fax: (972)-25662581
>>>>
>>>> C.E.O, Weather It Is, LTD
>>>> Weather and Climate Focus
>>>> http://weather-it-is.com
>>>> Jerusalem, Israel
>>>> Local: 02 930 9525
>>>> Cell: 054 7 231 170
>>>> Int-IS: x972 2 930 9525
>>>> US 914 432 3108 <(914)%20432-3108>
>>>>
>>>
>>>
>>
>>
>> --
>> Barry H. Lynn, Ph.D
>> Senior Lecturer,
>> The Institute of the Earth Science,
>> The Hebrew University of Jerusalem,
>> Givat Ram, Jerusalem 91904, Israel
>> Tel: 972 547 231 170
>> Fax: (972)-25662581
>>
>> C.E.O, Weather It Is, LTD
>> Weather and Climate Focus
>> http://weather-it-is.com
>> Jerusalem, Israel
>> Local: 02 930 9525
>> Cell: 054 7 231 170
>> Int-IS: x972 2 930 9525
>> US 914 432 3108 <(914)%20432-3108>
>>
>
>
>
> --
> Barry H. Lynn, Ph.D
> Senior Lecturer,
> The Institute of the Earth Science,
> The Hebrew University of Jerusalem,
> Givat Ram, Jerusalem 91904, Israel
> Tel: 972 547 231 170
> Fax: (972)-25662581
>
> C.E.O, Weather It Is, LTD
> Weather and Climate Focus
> http://weather-it-is.com
> Jerusalem, Israel
> Local: 02 930 9525
> Cell: 054 7 231 170
> Int-IS: x972 2 930 9525
> US 914 432 3108 <(914)%20432-3108>
>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu
> List instructions, subscriber options, unsubscribe:
> http://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>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20171121/0024972a/attachment.html>


More information about the ncl-talk mailing list