[ncl-talk] NCL Creating Time Series Plots

Smith, Stuart smit1770 at purdue.edu
Fri Feb 2 07:51:47 MST 2018


Good morning Adam,

 

I wanted to follow up with some revisions to my script in case others wanted to use it, though there are still improvements to be made.  Listed below is a script that reads in a list of NetCDF files and joins them together to create a time series plot.

 

A time variable is defined, although all values are 0. This is something I wish to improve in the script, and have it print out dates instead of 0 values as shown below. If you have any suggestions on improvments to be made please let me know. Thank you for your time.


Current Print Output of data at time

Goal to print output of data at time


(0)      0

(1)      0

(2)      0

(3)      0

(4)      0

(5)      0

(6)      0

(7)      0

 

(0)      2009-03-01

(1)      2009-03-02

(2)      2009-03-03

(3)      2009-03-04

(4)      2009-03-05

(5)      2009-03-06

(6)      2009-03-07

(7)      2009-03-08

 

 

;Time series plotting script

 

begin

 

;Go to directory of interest 

 

diri = "/scratch/conte/s/smit1770/RRB_Test_Simulation/RedRiver/OUTPUT_8x6.1hr_2018/SURFACEMODEL/200903/"

 

 

;list names of all of the files and add ful file path

fils = systemfunc("ls "+diri+"*.d01.nc") 

  

;print(fils)   ; make sure the desired files are listed in the correct order

 

 

;read in all files  

 a = addfiles(fils,"r")

ListSetType (a, "join")

  data = a[:]->vic_lake_depth_inst

  data at time=a[:]->time

  

   

  ;print(data) ;prints data values

   

  ;print(data at time); prints variable time, but all values are 0.

  ;printVarSummary(data)    ; examine data array. Result is [ncl_join | 31] x [north_south | 32] x [east_west | 45]

 

  data_aa = wgt_areaave(data,1.,1.,0)   ; Not applying any area-weight to the data

  ;print(data_aa)

  wks = gsn_open_wks("png","timeseries")

 

  resplot = True

  restick = True

  restick at ttmValues= (/(/2009,3,1/),(/2009,3,15/),(/2009,3,31/)/)

   

  resplot at tiMainString      = "March Water Depth";title name

 

 

  plot = gsn_csm_xy(wks,ispan(0,dimsizes(data at time)-1,1),data_aa,resplot)

 

end

 

 

Regards,

 

-Stuart 

From: Adam Phillips [mailto:asphilli at ucar.edu] 
Sent: Tuesday, January 23, 2018 2:12 PM
To: Smith, Stuart <smit1770 at purdue.edu>
Cc: Ncl-talk <ncl-talk at ucar.edu>
Subject: Re: [ncl-talk] NCL Creating Time Series Plots

 

Hi Stuart,

Always remember to include ncl-talk in your reply, so that others can follow along and/or learn from the conversation in the future via the archives. 

 

You sent along a printVarSummary of data:

Variable: data

Type: float

Total Size: 178560 bytes

            44640 values

Number of Dimensions: 2

Dimensions and sizes:   [north_south | 992] x [east_west | 45]

Coordinates:

Number Of Attributes: 9

  units :       m

  standard_name :       vic_lake_depth

  long_name :   vic_lake_depth

  scale_factor :         1

  add_offset :   0

  missing_value :       -9999

  _FillValue :  -9999

  vmin :        -1e+15

  vmax :        1e+15 

 

It looks to me that NCL is concatenating your first dimension when the data is read in via addfiles, and thus indicates that each data file does not have a time dimension as part of the vic_lake_depth_inst variable. By default, addfiles will cat the leftmost dimension of all input files. But it can also be used to join the files together creating a new leftmost dimension. See example #2 here:

https://www.ncl.ucar.edu/Document/Functions/Built-in/addfiles.shtml

 

Try this:

 a = addfiles(fils,"r")

ListSetType (a, "join")       

 data = a[:]->vic_lake_depth_inst

printVarSummary(data)

 

Your data should now be read in correctly.

 

If you have any further questions please reply to the ncl-talk list.

Adam

 

 

On Fri, Jan 19, 2018 at 3:27 PM, Smith, Stuart <smit1770 at purdue.edu <mailto:smit1770 at purdue.edu> > wrote:

Good afternoon Adam,

 

Thank you for the input. I’ve learned a lot. In the example you provided, “data” was assumed to have the variable time with the depth of water. In my .nc files depth of water and time are not named in the same dimension.

 

As a result I get the following message, “fatal:(time) is not a named dimension in variable (data). “  I tried to adjust the script by assigning a time variable to the defined data variable as shown below.  However, this was unsuccessful. Any advice? Thank you for your time.

 

begin

 

diri = "/scratch/conte/s/smit1770/RRB_Test_Simulation/RedRiver/OUTPUT_8x6.1hr_2018/SURFACEMODEL/200903/"

 

;fils = systemfunc("ls *.d01.nc <http://d01.nc> ")

fils = systemfunc("ls "+diri+"*.d01.nc <http://d01.nc> ") 

 

;print(fils)   ; make sure the desired files are listed in the correct order

  

 a = addfiles(fils,"r")

   data = a[:]->vic_lake_depth_inst

   data at time=a[:]->time

   ;time = a[:]->time    ; assuming variable name is Depth_of_water

   ;print(time)

   ;print(data)

   print(data&time)   ; check that the times read in are correct

   ;printVarSummary(data)    ; examine data array

 

   data_aa = wgt_areaave(data,1.,1.,0)   ; Not applying any area-weight to the data

 

   wks = gsn_open_wks("png","timeseries")

 

   res = True

   res at tmXBMode          = "Explicit"              ; explicit labels

   res at tmXBValues        = time                       ; location of labels 

   res at tmXBLabels        = "Test"                ; labels themselves

   res at tmLabelAutoStride = True                    ; nice stride on labels

   res at tiMainString      = "Explicit axis labeling"; title

 

 

  ;plot = gsn_csm_xy(wks,ispan(0,dimsizes(data&time)-1,1,data_aa,res)

  plot = gsn_csm_xy(wks,ispan(0,dimsizes(data&time)-1,1),data_aa,res)

 

 

end

 

Regards,

 

-Stuart

 

From: Adam Phillips [mailto:asphilli at ucar.edu <mailto:asphilli at ucar.edu> ] 
Sent: Thursday, January 18, 2018 12:32 PM
To: Smith, Stuart <smit1770 at purdue.edu <mailto:smit1770 at purdue.edu> >
Cc: Ncl-talk <ncl-talk at ucar.edu <mailto:ncl-talk at ucar.edu> >
Subject: Re: [ncl-talk] NCL Creating Time Series Plots

 

Hi Stuart,

If the files are sequentially named, you can use addfiles to read all the files at once:

 

begin

   fils = systemfunc("ls *.d01.nc <http://d01.nc> ")

   print(fils)   ; make sure the desired files are listed in the correct order

   a = addfiles(fils,"r")

   data = a[:]->Depth_of_water    ; assuming variable name is Depth_of_water

   print(data&time)   ; check that the times read in are correct

   printVarSummary(data)    ; examine data array

 

   data_aa = wgt_areaave(data,1.,1.,0)   ; Not applying any area-weight to the data

 

   wks = gsn_open_wks("png","timeseries")

 

   res = True

   ...   ; set desired resources here

 

  plot = gsn_csm_xy(wks,ispan(0,dimsizes(data&time)-1,1,data_aa,res)

end

 

Note:

1 - Make sure that the results from systemfunc list the files that you want to read in in the correct order.

2 - You may very well want to area weight the data, and this may have to be done by hand as I do not believe a function exists that can do that on an array with 2-dimensional latitudes/longitudes. 

3 - There are lots of different resources that can be set for timeseries, specifically for the tickmarks. Review the examples here:

http://www.ncl.ucar.edu/Applications/xy.shtml

http://www.ncl.ucar.edu/Applications/time_labels.shtml

http://www.ncl.ucar.edu/Applications/tickmarks.shtml

 

Hope that helps. If you have any further questions please respond to the ncl-talk email list.

Adam

 

 

  

   

 

On Wed, Jan 17, 2018 at 2:24 PM, Smith, Stuart via ncl-talk <ncl-talk at ucar.edu <mailto:ncl-talk at ucar.edu> > wrote:

Good afternoon,

 

My name is Stuart, and I am research assistant at Purdue University.. I tried using the serach ncl-talk archives, but received a “URL Not Found” message.

 

I am wanting to learn about generating time series plots with .nc files. The .nc files I have are daily timesteps (200903250000.d01.nc <http://200903250000.d01.nc> , 200903260000.d01.nc <http://200903260000.d01.nc> ). I would like to plot the .nc files as a spatially averaged(ex. Depth of water)  time series plot for an entire month. 

 

The dimension of time is 1,  as to be expected. The dimension of the variable of interest is 2 [north_south|32] x [east_west |45]. My goal would be to calculate the average value over this area, and plot it with the appropriate day to create the time series.

 

Could you please provide some examples of how this problem has been solved in the past? Thank you for your time.

 

Regards,

 

-Stuart 


_______________________________________________
ncl-talk mailing list
ncl-talk at ucar.edu <mailto: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/ <http://www.cgd.ucar.edu/staff/asphilli/>    303-497-1726 <tel:(303)%20497-1726>  

 





 

-- 

Adam Phillips 

Associate Scientist,  Climate and Global Dynamics Laboratory, NCAR

www.cgd.ucar.edu/staff/asphilli/ <http://www.cgd.ucar.edu/staff/asphilli/>    303-497-1726 

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20180202/8600d698/attachment.html>


More information about the ncl-talk mailing list