[ncl-talk] stat_despersion

ali mughal mughalali655 at gmail.com
Thu Jul 1 04:57:37 MDT 2021


I hope the above code is correct.
In case it is correct, I would need to express the color bar with the
percentage distribution as follows. I hope someone can help me with it as
well.
[image: image.png]

On Thu, Jul 1, 2021 at 6:47 PM ali mughal <mughalali655 at gmail.com> wrote:

> Dear All
>
> When doing a few modifications I am able to obtain the attached images for
> the 10th and 95th percentile. Please let me know if the following code is
> correct. I am not copying the plotting part since it will prolong the
> email.
>
> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
> a=addfile("BEM_April","r")
> ta_mean_BEM=a->TA_MEAN
> ta=ta_mean_BEM(24:719,0,:,:)
> ta=ta-273.16
>
> nlat1=ta(0,:,0)
> mlon1=ta(0,0,:)
> opt=False
>
>     nlStrt=0
>      nlLast=129
>      mlStrt=0
>      mlLast=210
>      nlat=dimsizes(nlat1)
>      mlon=dimsizes(mlon1)
>     grid_stats = new ((/nlat,mlon,30/), typeof(ta),getFillValue(ta))
>
>     do nl=0,nlLast-1
>       do ml=0,mlLast-1
>          grid_stats(nl-nlStrt,ml-mlStrt,:) = stat_dispersion(ta(:,nl,ml),
> opt)
>       end do
>    end do
>
>
> copy_VarCoords(x(:,nlStrt:nlLast,mlStrt:mlLast), grid_stats)
> grid_stats at long_name = "stat_dispersion at individual grid points"
> printVarSummary(grid_stats)
>
> tenthP=grid_stats(:,:,3)
> ;print(tenthP)
> printVarSummary(tenthP)
> nintythP=grid_stats(:,:,13)
> printVarSummary(nintythP)
>
>
>
> On Thu, Jul 1, 2021 at 3:36 PM Buzan, Jonathan <jbuzan at purdue.edu> wrote:
>
>> Ali,
>>
>> stat_dispersion produces 30 values, the space for it to be dumped into
>> needs to have 30 spaces.
>> But you should separate 1 grid cell (like, ta1gridcell= ta(0,0,0)), print
>> the values, and operate on that 1 grid cell.
>>
>> Cheers,
>> -Jonathan
>>
>>
>>
>>
>> On Jul 1, 2021, at 9:33 AM, ali mughal <mughalali655 at gmail.com> wrote:
>>
>> Thanks for the reply
>>
>> shouldn't this
>> grid_stats(68,160,:) = stat_dispersion( ta(:,68,160), opt)
>>
>> be changed to
>>
>> grid_stats(68,160,3) = stat_dispersion( ta(:,68,160), opt)
>>
>> to obtain the 10th Percentile ?
>>
>> when I do it I get the following error
>>
>> fatal:VarVarWrite: Number of dimensions on left hand side does not match
>> right hand side
>> fatal:["Execute.c":8576]:Execute: Error occurred at or near line 41
>>
>>
>>
>> On Thu, Jul 1, 2021 at 3:27 PM Muhammad Omer Mughal <
>> m.mughal1 at graduate.curtin.edu.au> wrote:
>>
>>> Ali
>>> This was a suggestion.
>>>
>>>
>>>
>>>
>>>
>>> ------------------------------
>>> *From:* Muhammad Omer Mughal <m.mughal1 at graduate.curtin.edu.au>
>>> *Sent:* Thursday, 1 July 2021 3:22 PM
>>> *To:* ali mughal <mughalali655 at gmail.com>; Buzan, Jonathan <
>>> jbuzan at purdue.edu>
>>> *Cc:* Ncl-talk <ncl-talk at ucar.edu>
>>> *Subject:* Re: [ncl-talk] stat_despersion
>>>
>>> I used the following script . I also copied the result at the end of the
>>> script. Can it be due to the reason that the value is too small
>>>
>>>
>>> a=addfile("BEM_April","r")
>>> ta_mean_BEM=a->TA_MEAN
>>> ta=ta_mean_BEM(24:719,0,:,:)
>>> ta=ta-273.16
>>>
>>> opt=False
>>>       nlat=dimsizes(nlat1)
>>>      mlon=dimsizes(mlon1)
>>>     grid_stats = new ((/nlat,mlon,30/), typeof(ta), getFillValue(ta))
>>>     grid_stats(68,160,:) = stat_dispersion( ta(:,68,160), opt)
>>>     printMinMax (grid_stats, False)
>>>
>>> (0)     Robust Dispersion Statistics: min=-0.552326   max=696
>>>
>>>
>>>
>>> ------------------------------
>>> *From:* ncl-talk <ncl-talk-bounces at mailman.ucar.edu> on behalf of
>>> Buzan, Jonathan via ncl-talk <ncl-talk at mailman.ucar.edu>
>>> *Sent:* Thursday, 1 July 2021 2:24 PM
>>> *To:* ali mughal <mughalali655 at gmail.com>
>>> *Cc:* Ncl-talk <ncl-talk at ucar.edu>
>>> *Subject:* Re: [ncl-talk] stat_despersion
>>>
>>> Hello,
>>>
>>> You should try 1 grid cell first and print the values and print the
>>> stat_dispersion, and double check that you are feeding the array the
>>> correct data.
>>>
>>> -Jonathan
>>>
>>>
>>>
>>> On Jul 1, 2021, at 5:52 AM, ali mughal via ncl-talk <
>>> ncl-talk at mailman.ucar.edu> wrote:
>>>
>>> Sorry a correction to the above email is that all values in grid_stats,
>>> tenthP and nintythP are 0.
>>>
>>> On Thu, Jul 1, 2021 at 11:49 AM ali mughal <mughalali655 at gmail.com>
>>> wrote:
>>>
>>> Dear All
>>>
>>> Here is how I have modified the code according to your suggestions.
>>> However, I am getting all values in the output of grid_stats.and when I try
>>> plotting the tenth percentile I also have a zero value.  I will be
>>> extremely grateful for your support.
>>>
>>>
>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
>>> a=addfile("wrfout","r")
>>> ta_mean_BEM=a->TA_MEAN
>>> ta=ta_mean_BEM(24:719,0,:,:)
>>> ta=ta-273.16
>>> nlat1=ta(0,:,0)
>>> mlon1=ta(0,0,:)
>>>
>>>
>>>  nlStrt=0
>>>  nlLast=129
>>>  mlStrt=0
>>>  mlLast=210
>>>  nlat=dimsizes(nlat1)
>>>  mlon=dimsizes(mlon1)
>>>
>>>  grid_stats = new ((/nlat,mlon,30/), typeof(ta), getFillValue(ta))
>>>     do nl=nlStrt,nlStrt-1
>>>       do ml=mlStrt,mlStrt-1
>>>
>>>          grid_stats(nl-nlStrt,ml-mlStrt,:) = stat_dispersion(
>>> ta(:,nl,ml), opt)
>>>
>>>       end do
>>>    end do
>>>
>>> tenthP=grid_stats(:,:,3)
>>>
>>> nintythP=grid_stats(:,:,13)
>>>
>>>
>>> type = "png"
>>> wks = gsn_open_wks(type,"abc")
>>> res =True
>>> opts = res
>>> opts at cnFillOn = True
>>> opts at cnConstFEnableFill           = True
>>> opts at cnConstFLabelBackgroundColor = "transparent"
>>>
>>>
>>> pltres = True
>>> pltres at NoTitles = True
>>> pltres at gsnMaximize = True
>>> pltres at FramePlot = False
>>> pltres at PanelPlot = True
>>> mpres = True
>>> mpres at mpOutlineBoundarySets    ="NoBoundaries"
>>> contour_lh = wrf_contour(a,wks,tenthP,opts)
>>> delete(opts)
>>>
>>> plot = wrf_map_overlays(a,wks,(/contour_lh/),pltres,mpres)
>>> draw(plot)
>>> frame(wks)
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Wed, Jun 30, 2021 at 10:24 PM Dave Allured - NOAA Affiliate <
>>> dave.allured at noaa.gov> wrote:
>>>
>>> Also, stat_dispersion returns an array of 30 values each time, not a
>>> single value.  See function documentation.  So you need to add an extra
>>> dimension in the loop calculation, like this:
>>>
>>>     grid_stats = new ((/ nlat, mlon, 30 /), typeof(rf), getFillValue(rf))
>>>
>>>     do ...
>>>        do ...
>>>          grid_stats(nl-nlStrt,ml-mlStrt,:) = stat_dispersion(
>>> rf(:,nl,ml), opt)
>>>       end do
>>>     end do
>>>
>>> When the loop is complete, the 10th percentile values will be in
>>> grid_stats(:,:,3), which is a 2-D grid that you can plot.  The 90th
>>> percentile values will be in grid_stats(:,:,13).  Again, refer to the
>>> function documentation for the correct index values to access the desired
>>> statistics.
>>>
>>>
>>> On Wed, Jun 30, 2021 at 5:13 AM Buzan, Jonathan <jbuzan at purdue.edu>
>>> wrote:
>>>
>>> NCL counts from 0 to n-1, not from 1 to n. So your loop vars need to
>>> account for that.
>>>
>>> Cheers,
>>> -Jonathan
>>>
>>> On Jun 30, 2021, at 1:10 PM, ali mughal via ncl-talk <
>>> ncl-talk at mailman.ucar.edu> wrote:
>>>
>>> Dear community
>>> Thank you very much for your helpful comments.
>>> As an initial test, I was trying to obtain statistics at all grid points
>>> before plotting them. I used the following code
>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
>>> a=addfile("wrfout","r")
>>> ta_mean_BEM=a->TA_MEAN
>>> ta=ta_mean_BEM(24:719,0,:,:)
>>> rf=ta-273.16
>>> nlat1=rf(0,:,0)
>>> printVarSummary(nlat)
>>> mlon1=rf(0,0,:)
>>> printVarSummary(mlon)
>>> printVarSummary(rf)
>>> opt=False
>>>
>>>      nlStrt=0
>>>      nlLast=129
>>>      mlStrt=0
>>>      mlLast=210
>>>      nlat=dimsizes(nlat1)
>>>      mlon=dimsizes(mlon1)
>>>
>>>     grid_stats = new ((/nlat(0),mlon(0)/), typeof(rf), getFillValue(rf))
>>>     printVarSummary(grid_stats)
>>>     do nl=0,nlLast
>>>       do ml=0,mlLast
>>>
>>>          grid_stats(nl-nlStrt,ml-mlStrt) = stat_dispersion( rf(:,nl,ml),
>>> opt)
>>>
>>>       end do
>>>    end do
>>>
>>>    copy_VarCoords(rf(:,nlStrt:nlLast,mlStrt:mlLast), grid_stats)
>>>    grid_stats at long_name = "stat_dispersion at individual grid points"
>>>    printVarSummary(grid_stats)
>>>
>>> But I obtain the following output from my print statements and the errors
>>>
>>> Variable: rf
>>> Type: float
>>> Total Size: 75418560 bytes
>>>             18854640 values
>>> Number of Dimensions: 3
>>> Dimensions and sizes:   [696] x [129] x [210]
>>> Coordinates:
>>>
>>> Variable: grid_stats
>>> Type: float
>>> Total Size: 108360 bytes
>>>             27090 values
>>> Number of Dimensions: 2
>>> Dimensions and sizes:   [129] x [210]
>>> Coordinates:
>>> fatal:VarVarWrite: Number of dimensions on left hand side does not match
>>> right hand side
>>> fatal:["Execute.c":8578]:Execute: Error occurred at or near line 46 in
>>> file var_Test.ncl
>>>
>>> fatal:Subscript out of range, error in subscript #1
>>> fatal:An error occurred reading rf
>>> fatal:["Execute.c":8578]:Execute: Error occurred at or near line 51 in
>>> file var_Test.ncl
>>>
>>> Variable: grid_stats
>>> Type: float
>>> Total Size: 108360 bytes
>>>             27090 values
>>> Number of Dimensions: 2
>>> Dimensions and sizes:   [129] x [210]
>>> Coordinates:
>>> Number Of Attributes: 1
>>>   long_name :   stat_dispersion at individual grid points
>>>
>>>
>>> On Wed, Jun 30, 2021 at 12:01 AM Dave Allured - NOAA Affiliate <
>>> dave.allured at noaa.gov> wrote:
>>>
>>> Ali, you do not need to make new code to find the 10th and 90th
>>> percentile values.  Just use stat_dispersion directly, and take only the
>>> output values that you need.  The function is designed to be used in this
>>> way.  There is no significant performance impact from ignoring all the
>>> other result values.
>>>
>>> You can easily make a spatial map of 10th or 90th percentile values.
>>> Just call stat_dispersion inside a double loop over X and Y dimensions.
>>>
>>>
>>> On Tue, Jun 29, 2021 at 9:23 AM Buzan, Jonathan via ncl-talk <
>>> ncl-talk at mailman.ucar.edu> wrote:
>>>
>>> Hello,
>>>
>>> I’ve used that function a bunch. If you only want 10th and 90th
>>> percentile, you’ll want to use:
>>>
>>> qsort
>>> Which will sort your data within a single grid cell from lowest to
>>> highest.
>>>
>>> And then grab the specific lines of code for 10th and 90th percentiles
>>> from the stat_dispersion function in:
>>> $NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl
>>>
>>> If you look at the function, you’ll see that it uses qsort, then goes
>>> step by step through calculating all the different applications.
>>>
>>> Cheers,
>>> -Jonathan
>>>
>>> On Jun 29, 2021, at 5:14 PM, ali mughal via ncl-talk <
>>> ncl-talk at mailman.ucar.edu> wrote:
>>>
>>> Dear NCL community
>>>
>>> In the following ncl function
>>>
>>>
>>> http://www.ncl.ucar.edu/Document/Functions/Contributed/stat_dispersion.shtml
>>>
>>> Is it possible to use 10th and 90th percentile values only ?
>>>
>>> Also can these values be used to develop a spatial map?
>>>
>>> For example if I want to find the 10th and  90th percentile of air
>>> temperature within the urban grid cells only.
>>>
>>> Can anyone share an example script or point me to any web resource will
>>> be appreciated.
>>>
>>> Thanks in advance
>>>
>>> _______________________________________________
>>> ncl-talk mailing list
>>> ncl-talk at mailman.ucar.edu
>>> List instructions, subscriber options, unsubscribe:
>>> https://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>
>>>
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210701/12c4b8b7/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 19322 bytes
Desc: not available
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210701/12c4b8b7/attachment.png>


More information about the ncl-talk mailing list