[ncl-talk] Fewer questions about a Histogram Plot

Adam Phillips asphilli at ucar.edu
Tue Nov 21 16:47:06 MST 2017


Hi Mary,
I simplified my original script to make it easier to digest.
gsnXRefLineThicknessF should have been eliminated; I just missed it.
Adam

On Tue, Nov 21, 2017 at 4:24 PM, Mary Haley <haley at ucar.edu> wrote:

> 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 at gsnHistogramBinIntervals)-2)+((hres@
>> 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 <(303)%20497-1726>
>>
>> <http://www.cgd.ucar.edu/staff/asphilli>
>>
>
>
> _______________________________________________
> 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/a000c5b2/attachment.html>


More information about the ncl-talk mailing list