[ncl-talk] Fewer questions about a Histogram Plot

Mary Haley haley at ucar.edu
Tue Nov 21 16:24:43 MST 2017


Hi Barry,

I haven't checked my email in awhile, and just now noticed that Adam
answered this question.  I had just added an example to the bar chart page
showing pretty much exactly what Adam did, and that is using the
gsn_histogram function to bin the data for you, and then gsn_csm_xy to
create your own bar chart.

See bar_21.ncl at:

http://www.ncl.ucar.edu/Applications/bar.shtml#ex21

You can run this example since it uses dummy data. Adam does some nice
things with his example that customizes the plot a little more, like
thickening the border around the bars and adding a reference line.

Adam, I noticed you are setting gsnYRefLine to 0, but then
gsnXRefLineThicknessF to 3. Is this an error? Since there's no  X reference
line set, gsnXRefLineThicknessF shouldn't have any effect.

--Mary



On Tue, Nov 21, 2017 at 10:49 AM, Adam Phillips <asphilli at ucar.edu> wrote:

> 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@
> gsnHistogramBinIntervals)-2)+((hres at gsnHistogramBinIntervals(1)-hres@
> 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 <(303)%20497-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/d53d835c/attachment.html>


More information about the ncl-talk mailing list