[ncl-talk] Converting time to datestring

Dave Allured - NOAA Affiliate dave.allured at noaa.gov
Thu Feb 4 14:31:16 MST 2021


Okay.  Comment out these two lines.  You might need to put them back later,
but they do not do what you think.  @ttmValues is only to select the date
positions to have visible printed labels.  In other words it is to select a
subset of dates across the whole axis.

    cd_date = cd_calendar(times, -2)
    restick at ttmValues = cd_date

Then change these two lines to read as follows.  These functions need
the *original time
coordinates*, not the *decoded date/time values* that you made in *cd_date*.

    time_axis_labels (*time*, res, restick)
    plot = gsn_csm_xy (wks, *time*, y, res)

Pay close attention to the details in the function documentation for
*time_axis_labels*.  Note that most of the *"ttm"* input attributes for
that procedure are optional.  You only use them to get certain special
effects if you want them.


On Thu, Feb 4, 2021 at 1:58 PM Zilore Mumba via ncl-talk <
ncl-talk at mailman.ucar.edu> wrote:

> I have made a lot of progress with:
>    times  = f->time                         ; get times in file
>    cd_date = cd_calendar(times, -2)
> ;   print(cd_date) This prints all the dates correctly as yyyymmdd
>
> Then I have:
>    res                      =  True
>    restick                  =  True
>    restick at ttmValues        =  cd_date
>    restick at ttmFormat        = "%D/%N/%Y"
>    res at xyLineThicknessF     =  3.0                        ; set line
> thickness
>    res at xyLineColor          =  "red"                      ; set line color
>    res at xyDashPatterns       =  0                          ; solid line
>    res at tmXBLabelFontHeightF = 0.010
>    res at tiYAxisString        =  "Daily " + " " + y at standard_name +"  "+
> "at 15S/30E"              ; y-axis string
>
> ; create the plot
> ;-----------------------------------------------
>    time_axis_labels(cd_date,res,restick)
>         ; call the formatting procedure
>    plot = gsn_csm_xy(wks,cd_date,y,res)
>         ; should produce bottom x-axis ticks as dd/mm/yyyy (01/01/1971).
>
> I am able to have yyyy0000 on the x-axis. What I am trying to figure out
> now is how to use "time_axis_labels".
>
> On Thu, Feb 4, 2021 at 10:17 PM Barry Lynn <barry.h.lynn at gmail.com> wrote:
>
>> Hi:
>>
>> You have to define year, month, etc from your data.
>>
>> Can you do that?
>>
>>
>> On Thu, 4 Feb 2021 at 20:39 Zilore Mumba <zmumba at gmail.com> wrote:
>>
>>> Hello Lynn,
>>> Sorry I have had no success with the code you sent me. On the line
>>> new_time_array = cd_inv_calendar( year(it,1,1),  month(it,1,1),
>>> day(it,1,1), hour(it,1,1), minute(it,1,1), 0, new_time_units,0)
>>> I get the error: fatal:Undefined identifier: (year) is undefined, can't
>>> continue
>>>
>>> On Thu, Feb 4, 2021 at 7:55 AM Barry Lynn <barry.h.lynn at gmail.com>
>>> wrote:
>>>
>>>> Hi:
>>>>
>>>> Try adjusting the third line here:
>>>>
>>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/cd_string.ncl"
>>>>
>>>> begin code...
>>>>
>>>> new_time_units = "hours since 1800-01-01 00:00"
>>>> new_time_units = new_time_units
>>>> new_time_array = cd_inv_calendar( year(it,1,1),  month(it,1,1),
>>>> day(it,1,1), hour(it,1,1), minute(it,1,1), 0, new_time_units,0)
>>>> print("new_time_array = " + new_time_array)
>>>> printVarSummary(new_time_array)
>>>> format = "" ;; defaults to "%H%M IST %d %c %Y"
>>>>  format = "%H%M IST %d %c %Y"
>>>>  new_time_array = new_time_array + 2.01
>>>> ;format = "%H%M IDT %d %c %Y"
>>>> ;new_time_array = new_time_array + 3.01
>>>> time_var=cd_string(new_time_array,format)
>>>> print("time_var = " + time_var)
>>>>
>>>> On Thu, Feb 4, 2021 at 7:17 AM Zilore Mumba via ncl-talk <
>>>> ncl-talk at mailman.ucar.edu> wrote:
>>>>
>>>>> Hello,
>>>>> I hope I can get quick help to set me off as it is taking me days to
>>>>> make sense of what I have to do.
>>>>> I have historical (1971-200) and model simulation (2021-2050) data. I
>>>>> have adapted an ncl script from the DKRZ website for plotting a time series.
>>>>>
>>>>> With print(times) I get the time range 7701.5 to 18658.5.
>>>>> When I plot the time series at a point I get the x-axis range 6000 60
>>>>> 20000
>>>>> ncdump -h on the file indicates that time:units = "days since
>>>>> 1949-12-01 00:00:00"
>>>>> my data has format yyyymmdd (yearmothday). I want the x-axis to show
>>>>> dates.
>>>>>
>>>>> I have been looking in the ncl documentation how to do this. This may
>>>>> take me days or weeks.
>>>>> I would appreciate any help in this.
>>>>> The script I have is below
>>>>>
>>>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl"
>>>>> begin
>>>>>
>>>>>    diri = "./"                             ; directory where to find
>>>>> the data
>>>>>    fili =
>>>>> "pr_AFR-44_CNRM-CERFACS-CNRM-CM5_historical_r1i1p1_SMHI-RCA4_v1_day_19710101_20001231Reg.nc"
>>>>>             ; file name
>>>>>
>>>>>    f   = addfile(diri+fili,"r")             ; open file
>>>>>
>>>>>    t1 = f->pr(:,{-15},{30})                 ; read precip time series
>>>>> at 15S/30E
>>>>>
>>>>>    times  = f->time                         ; get times in file
>>>>>    cd_date = cd_calendar(times, -2)
>>>>>
>>>>> ; open a workstation
>>>>> ;----------------------------------------------------------------
>>>>>    wks_type = "X11"                         ; graphics output type
>>>>>    wks_type at wkWidth   =  1024               ; graphics output width
>>>>> in pixels
>>>>>    wks_type at wkHeight  =  1048               ; graphics output height
>>>>> in pixels
>>>>>
>>>>>    wks = gsn_open_wks(wks_type, "plot_xy_multiple_lines_axis")
>>>>>
>>>>> ; resources for variable t1, y-axis
>>>>> ;----------------------------------------------------------
>>>>>    resT1                      =  True
>>>>>    resT1 at ttmValues            =  cd_date
>>>>>    resT1 at xyLineThicknessF     =  3.0                        ; set
>>>>> line thickness
>>>>>    resT1 at xyLineColor          =  "red"                      ; set
>>>>> line color
>>>>>    resT1 at xyDashPatterns       =  0                          ; solid
>>>>> line
>>>>>    resT1 at tmXBLabelFontHeightF = 0.010
>>>>>    resT1 at tiYAxisString        =  "Daily " + " " + t1 at standard_name +"
>>>>>  "+ "at 15S/30E"              ; y-axis string
>>>>>
>>>>> ; create the plot
>>>>> ;-----------------------------------------------
>>>>>    plot = gsn_csm_xy(wks, times&time, t1, resT1)
>>>>>
>>>>> end
>>>>>
>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210204/7f0c1e28/attachment.html>


More information about the ncl-talk mailing list