· 8 years ago · Jun 07, 2018, 07:30 PM
1clearvars
2
3h= msgbox('Make sure there are no repeat dates in the hourly input file');
4%get filname with pushbutton
5%file should be tab-delimited text
6file = uigetfile('*.txt');
7
8
9%****As it is written, if there is no data in first rows of far right columns
10%then the columns will not be loaded****
11%if no data exists to start a column then add a zero's in order to get the
12%data to load
13%A= dlmread(file, '\t', 1,1); %old version of file input
14
15A = readtable(file); %Reads the file with mixed data types
16A(:,1) = []; %Removes datetime for table2array
17A(:,41) = []; %Strips out the notes column
18
19fid = fopen(file);
20timedata = textscan(fid, '%s %s %*[^\n]');
21fclose(fid);
22
23date = timedata{1};
24time = timedata{2};
25
26%remove header row from date and time columns
27date(1,:)=[];
28time(1,:)=[];
29
30%create unique dates and index
31serial = datenum(date);
32[days,trash,IDX] = unique(serial);
33daystring = datestr(days);
34
35%another approach to importing time vector
36%A = importdata(file, ' ', 1);
37% dt = datenum(A.textdata(2:end,1),'mm/dd/yyyy');
38% tm = datenum(A.textdata(2:end,2),'HH:MM:SS');
39% tm = dt+tm-datenum('0:0','HH:MM'); %# combine date and time and correct for zero time.
40% time = A.data;
41
42index = A(:,1);
43n=length(index);
44
45
46%assign columns to data vectors starting with micromet data
47batt = A(:,6); %amps
48airT = A(:,7); %degC
49RH_max = A(:,10);
50WS_avg = A(:,13); %m/sec
51rain = A(:,16); %rain
52SlrCM_avg = A(:,17);
53SlrCM_avgB = A(:,18);
54
55%add column that will later convert average incoming solar radiation (per
56%minute)to hourly total (or flux per hour) by summing
57
58SlrCH_tot = zeros(n,1);
59A(:,40) = SlrCH_tot;
60
61for i=1:n
62 SlrCH_tot(i)=SlrCM_avgB(i)*60;
63end
64
65
66%convert battery data to daily average using "logical addressing"
67%this has been moved to end of code, but I've left the battery example here
68%as an example of how the daily averaging is done
69
70% batt_day = [zeros(length(days),1)];
71%
72% for d=1:numel(days)
73% batt_day(d) = mean(batt(IDX==d,end));
74% end
75
76%output daily battery average for validation
77% fileID = fopen('daily_battery.txt', 'w');
78% fprintf(fileID, '%4.2f\n', batt_day);
79
80%water level / ptrans data (level in cm)
81GWlevelcm = A(:,19);
82
83%all soil temps are in degC and are avg
84tsoil6in = A(:,26);
85tsoil1ft = A(:,27);
86tsoil18in = A(:,28);
87tsoil2ft = A(:,29);
88tsoil3ft = A(:,30);
89
90%all electrical conductivity values are in kPa and are avg
91WP6inMIN = A(:,36);
92WP6inMAX = A(:,35);
93WP1ftMIN = A(:,32);
94WP1ftMAX = A(:,31);
95WP18inMIN = A(:,34);
96WP18inMAX = A(:,33);
97
98%calculate water potential averages from min/max data
99
100WP6inAVG = zeros(n,1);
101WP1ftAVG = zeros(n,1);
102WP18inAVG = zeros(n,1);
103
104for i=1:n
105 WP6inAVG(i)= (WP6inMIN(i) + WP6inMAX(i))/2;
106 WP1ftAVG(i)= (WP1ftMIN(i) + WP1ftMAX(i))/2;
107 WP18inAVG(i)= (WP18inMIN(i) + WP18inMAX(i))/2;
108end
109
110%uncorrected volumetric water content based on default Topp eqn.
111VWC6in = A(:,20);
112VWC1ft = A(:,21);
113VWC18in = A(:,22);
114
115%Permittivity
116perm6in = A(:,23);
117perm1ft = A(:,24);
118perm18in = A(:,25);
119
120%convert battery data to daily average using "logical addressing"
121batt_day = zeros(length(days),1);
122rain_day = zeros(length(days),1);
123airT_day = zeros(length(days),1);
124RH_avg_day = zeros(length(days),1);
125WS_avg_day = zeros(length(days),1);
126SlrCM_avg_day = zeros(length(days),1);
127SlrMJ_tot_day = zeros(length(days),1);
128tsoil6in_day = zeros(length(days),1);
129tsoil1ft_day = zeros(length(days),1);
130tsoil18in_day = zeros(length(days),1);
131tsoil2ft_day = zeros(length(days),1);
132tsoil3ft_day = zeros(length(days),1);
133WP6inMIN_day = zeros(length(days),1);
134WP6inMAX_day = zeros(length(days),1);
135WP6inAVG_day = zeros(length(days),1);
136WP1ftMIN_day = zeros(length(days),1);
137WP1ftMAX_day = zeros(length(days),1);
138WP1ftAVG_day = zeros(length(days),1);
139WP18inMIN_day = zeros(length(days),1);
140WP18inMAX_day = zeros(length(days),1);
141WP18inAVG_day = zeros(length(days),1);
142perm6in_day = zeros(length(days),1);
143perm1ft_day = zeros(length(days),1);
144perm18in_day = zeros(length(days),1);
145VWC6in_day = zeros(length(days),1);
146VWC1ft_day = zeros(length(days),1);
147VWC18in_day = zeros(length(days),1);
148T_max_day = zeros(length(days),1);
149T_min_day = zeros(length(days),1);
150RH_max_day = zeros(length(days),1);
151RH_min_day = zeros(length(days),1);
152GWlevelcm_day = zeros(length(days),1);
153
154for d=1:numel(days)
155batt_day(d) = mean(batt(IDX==d,end));
156rain_day(d) = (sum(rain(IDX==d,end)))/10;
157airT_day(d) = mean(airT(IDX==d,end));
158RH_avg_day(d) = mean(RH_max(IDX==d,end));
159WS_avg_day(d) = mean(WS_avg(IDX==d,end));
160SlrCM_avg_day(d) = mean(SlrCM_avg(IDX==d,end));
161SlrMJ_tot_day(d) = (sum(SlrCH_tot(IDX==d,end)))*0.041868;
162tsoil6in_day(d) = mean(tsoil6in(IDX==d,end));
163tsoil1ft_day(d) = mean(tsoil1ft(IDX==d,end));
164tsoil18in_day(d) = mean(tsoil18in(IDX==d,end));
165tsoil2ft_day(d) = mean(tsoil2ft(IDX==d,end));
166tsoil3ft_day(d) = mean(tsoil3ft(IDX==d,end));
167WP6inMIN_day(d) = min(WP6inMIN(IDX==d,end));
168WP6inMAX_day(d) = max(WP6inMAX(IDX==d,end));
169WP6inAVG_day(d) = mean(WP6inAVG(IDX==d,end));
170WP1ftMIN_day(d) = min(WP1ftMIN(IDX==d,end));
171WP1ftMAX_day(d) = max(WP1ftMAX(IDX==d,end));
172WP1ftAVG_day(d) = mean(WP1ftAVG(IDX==d,end));
173WP18inMIN_day(d) = min(WP18inMIN(IDX==d,end));
174WP18inMAX_day(d) = max(WP18inMAX(IDX==d,end));
175WP18inAVG_day(d) = mean(WP18inAVG(IDX==d,end));
176perm6in_day(d)= mean(perm6in(IDX==d,end));
177perm1ft_day(d)= mean(perm1ft(IDX==d,end));
178perm18in_day(d)= mean(perm18in(IDX==d,end));
179VWC6in_day(d)= mean(VWC6in(IDX==d,end));
180VWC1ft_day(d)= mean(VWC1ft(IDX==d,end));
181VWC18in_day(d)= mean(VWC18in(IDX==d,end));
182T_max_day(d) = max(airT(IDX==d,end));
183T_min_day(d) = min(airT(IDX==d,end));
184RH_max_day(d) = max(RH_max(IDX==d,end));
185RH_min_day(d) = min(RH_max(IDX==d,end));
186GWlevelcm_day(d)= mean(GWlevelcm(IDX==d,end));
187
188end
189
190
191save('Ecolab_temps_daily.mat', 'days', 'airT_day', 'tsoil6in_day', 'tsoil1ft_day', 'tsoil18in_day', 'tsoil2ft_day', 'tsoil3ft_day');
192save('Ecolab_moist_daily.mat', 'days', 'rain_day', 'WP6inMIN_day', 'WP6inMAX_day', 'WP1ftMIN_day', 'WP1ftMAX_day', 'WP18inMIN_day', 'WP18inMAX_day', 'VWC6in_day', 'VWC1ft_day', 'VWC18in_day');
193save('Ecolab_met_daily.mat', 'days', 'rain_day', 'airT_day', 'RH_max_day', 'WS_avg_day', 'SlrCM_avg_day');
194save('Ecolab_moist_comp_daily.mat', 'days', 'VWC6in_day', 'VWC1ft_day', 'VWC18in_day');
195
196%export Temp data to excel spreadsheet
197T = [days, airT_day, tsoil6in_day, tsoil1ft_day, tsoil18in_day, tsoil2ft_day, tsoil3ft_day];
198xlswrite('Ecolab_temps_daily.xls',T);
199
200%MOISTURE/TENSION DATA
201
202%Convert soil tension from kPa to cm H2O
203WP6inMIN_daycm=zeros(1,d);
204WP6inMAX_daycm=zeros(1,d);
205WP6inAVG_daycm=zeros(1,d);
206WP1ftMIN_daycm=zeros(1,d);
207WP1ftMAX_daycm=zeros(1,d);
208WP1ftAVG_daycm=zeros(1,d);
209WP18inMIN_daycm=zeros(1,d);
210WP18inMAX_daycm=zeros(1,d);
211WP18inAVG_daycm=zeros(1,d);
212
213for i=1:d
214 WP6inMIN_daycm(i) = WP6inMIN_day(i) *10.197;
215 WP6inMAX_daycm(i) = WP6inMAX_day(i) *10.197;
216 WP6inAVG_daycm(i) = WP6inAVG_day(i) *10.197;
217 WP1ftMIN_daycm(i) = WP1ftMIN_day(i) *10.197;
218 WP1ftMAX_daycm(i) = WP1ftMAX_day(i) *10.197;
219 WP1ftAVG_daycm(i) = WP1ftAVG_day(i) *10.197;
220 WP18inMIN_daycm(i) = WP18inMIN_day(i) *10.197;
221 WP18inMAX_daycm(i) = WP18inMAX_day(i) *10.197;
222 WP18inAVG_daycm(i) = WP18inAVG_day(i) *10.197;
223end
224
225%Transpose resulting matrices
226 WP6inMIN_daycm = WP6inMIN_daycm';
227 WP6inMAX_daycm = WP6inMAX_daycm';
228 WP6inAVG_daycm = WP6inAVG_daycm';
229 WP1ftMIN_daycm = WP1ftMIN_daycm';
230 WP1ftMAX_daycm = WP1ftMAX_daycm';
231 WP1ftAVG_daycm = WP1ftAVG_daycm';
232 WP18inMIN_daycm = WP18inMIN_daycm';
233 WP18inMAX_daycm = WP18inMAX_daycm';
234 WP18inAVG_daycm = WP18inAVG_daycm';
235
236%export Soil Moisture data to excel spreadsheet
237M = [days, rain_day, GWlevelcm_day, VWC6in_day, VWC1ft_day, VWC18in_day, WP6inAVG_daycm, WP1ftAVG_daycm, WP18inAVG_daycm];
238xlswrite('Ecolab_moist_daily1.xls',M);
239
240% %export corrected Soil Moisture data to excel spreadsheet for comparison
241% R = [days, perm1ft_day, perm2ft_day, perm3ft_day, perm4ft_day, perm5ft_day, perm6ft_day, VWC1ft_cor_day, VWC2ft_cor_day, VWC3ft_cor_day, VWC4ft_cor_day, VWC5ft_cor_day, VWC6ft_cor_day, VWC1ft_day, VWC2ft_day, VWC3ft_day, VWC4ft_day, VWC5ft_day, VWC6ft_day];
242% xlswrite('Eel_VWC_comp_daily.xls',R);
243
244%PREPARING DATA FOR DAILY PET CALCULATIONS
245
246%Convert temps from Celsius to Kelvin for PET calculations
247d=length(days);
248
249T_max_dayK=zeros(1,d);
250T_min_dayK=zeros(1,d);
251T_avg_dayK=zeros(1,d);
252
253for i=1:d
254 T_max_dayK(i) = T_max_day(i) + 273.16;
255 T_min_dayK(i) = T_min_day(i) + 273.16;
256 T_avg_dayK(i) = (T_max_dayK(i) + T_min_dayK(i))/2;
257end
258
259%Transpose resulting matrices
260T_max_dayK = T_max_dayK';
261T_min_dayK = T_min_dayK';
262T_avg_dayK = T_avg_dayK';
263
264%convert RH values to fraction of 1 as opposed to percent
265
266RH_max_dayFRAC=zeros(1,d);
267RH_min_dayFRAC=zeros(1,d);
268
269for i=1:d
270 RH_max_dayFRAC(i) = RH_max_day(i)/100;
271 RH_min_dayFRAC(i) = RH_min_day(i)/100;
272end
273
274RH_max_dayFRAC = RH_max_dayFRAC';
275RH_min_dayFRAC = RH_min_dayFRAC';
276
277% PETinput = [days, RH_max_dayFRAC, RH_min_dayFRAC, T_max_day, T_min_day, airT_day, WS_avg_day, SlrMJ_tot_day];
278% xlswrite('Ecolab_Daily_PET_Inputs.xls',PETinput);
279
280dates = floor(date2doy(days));
281
282%calculations from 'Crop evapotranspiration' Allen et. all, http://www.fao.org/docrep/x0490e/x0490e00.htm#Contents
283%variable calculations also from
284%Assign constants (THESE WILL CHANGE FOR EACH SITE)
285%Anemometer height (m)
286aht = 2.68;
287%Elevation (m)
288elev = 215.2;
289%Latitiude (radians)
290lat_deg = 39.82;
291lat_rad = lat_deg*(3.14159/180);
292%Albedo
293alb = 0.23;
294%Stefan Boltzman constant
295SBC = 4.903E-09;
296%Atmospheric pressure
297Patm = 101.3*(((293-0.0065*elev)/293)^5.26);
298%Psychometric constant
299gamma = 0.665e-3*Patm;
300
301
302%orientation of earth vs sun?
303EaSu = 1+(0.033*cos(((2*pi)/365)*dates));
304%solar Declination
305Sol = 0.409*(sin((((2*pi)/365)*dates)-1.39));
306%angle of sunset
307Wssu = acos(-tan(0.690798989)*(tan(Sol)));
308%daylight hours
309Nday = (24/pi)*Wssu;
310%daily radiation over area (MJ/m^2day)
311Ra = (((24*60)/pi)*(0.082.*(EaSu)).*((Wssu.*(sin(lat_rad)).*(sin(Sol)))+(cos(lat_rad).*(cos(Sol)).*(sin(Wssu)))));
312%clear sky radiation (MJ)
313Rso = ((0.75+(0.00002*336))*Ra);
314%net shortwave radiation (MJ)
315Rns = (1-alb)*SlrMJ_tot_day;
316%saturation vapour pressure at maximum temperature (kPa)
317Tmax = ((0.6108)*(exp((17.27.*(T_max_dayK-273.15))./((T_max_dayK-273.15)+237.3))));
318%saturation vapour pressure at minimum temperature (kPa)
319Tmin = ((0.6108)*(exp((17.27.*(T_min_dayK-273.15))./((T_min_dayK-273.15)+237.3))));
320%actual vapor pressure from relative humidity data (kPa)
321ea = (((Tmin.*(RH_max_dayFRAC))+((Tmax.*(RH_min_dayFRAC))))/2);
322%net longwave radiation (MJ)
323Rnl = ((SBC)*(((T_max_dayK.^4)+(T_min_dayK.^4))/2).*((0.34-(0.14*sqrt(ea))).*(((1.35*(SlrMJ_tot_day./Rso))-(0.35)))));
324%mean saturation vapour pressure
325es = (Tmax+Tmin)/2;
326%delta(vapor pressure)
327esea = es-ea;
328%net radiation
329Rn = Rns-Rnl;
330%windspeed (m/s)
331WS = WS_avg_day*((4.87/(log((67.8*aht)-5.41))));
332%slope of saturation vapour pressure curve
333delta = (((4098*(0.6108*(exp((17.27*((T_avg_dayK-273.15)./((T_avg_dayK-273.15)+237.3)))))))./(((T_avg_dayK-273.15)+237.3).^2)));
334%Penman-Monteith equation for potential evapotranspiration
335pet = (((0.408*delta.*Rn)+(((((gamma*(900./T_avg_dayK)).*WS).*esea))))./((delta+(gamma*(1+(0.34*WS))))));
336%convert to cm
337pet_cm = pet/10;
338%replace zeros with NaN
339pet_cm(pet_cm==0)=NaN;
340
341%convert day string vector to Matlab time vector
342date2 = datetime(daystring);
343
344%Write table with PET input parameters
345%Combine non-numeric date/time field with numeric parameter vectors using
346%"timetable" command to create a "mixed" array/table
347PETinput = timetable(RH_max_dayFRAC, RH_min_dayFRAC, T_max_dayK, T_min_dayK, T_avg_dayK, WS_avg_day, SlrMJ_tot_day, 'RowTimes', date2);
348PETinput2 = timetable2table(PETinput);
349writetable(PETinput2, 'Ecolab_Daily_PET_Inputs.xlsx');
350
351%Write table with all daily micromet data and export to excel
352%Combine non-numeric date/time field with numeric parameter vectors using
353%"timetable" command to create a "mixed" array/table
354Micro = timetable(batt_day, rain_day, airT_day, T_max_day, T_min_day, RH_max_day, RH_min_day, WS_avg_day, SlrCM_avg_day, SlrMJ_tot_day, pet_cm, 'RowTimes', date2);
355Micro2 = timetable2table(Micro);
356writetable(Micro2, 'Ecolab_micromet_daily.xlsx');
357
358%export uncorrected (Topp Equation) soil moisture and water potential data to Excel
359Moist = timetable(rain_day, WP6inAVG_daycm, WP1ftAVG_daycm, WP18inAVG_daycm, VWC6in_day, VWC1ft_day, VWC18in_day, 'RowTimes', date2);
360Moist2 = timetable2table(Moist);
361writetable(Moist2, 'Ecolab_moist_daily.xlsx');
362
363%export temp data to excel spreadsheet
364T = timetable(airT_day, T_max_day, T_min_day, tsoil6in_day, tsoil1ft_day, tsoil18in_day, 'RowTimes', date2);
365T2 = timetable2table(T);
366writetable(T2, 'Ecolab_temps_daily.xlsx');
367
368%export spreadsheet with all column values in same order as compiled
369%spreadsheet
370OrderedCols = timetable(rain_day, VWC6in_day, VWC1ft_day, VWC18in_day, WP6inAVG_daycm, WP1ftAVG_daycm, WP18inAVG_daycm, RH_max_dayFRAC, RH_min_dayFRAC, T_max_day, T_min_day, WS_avg_day, SlrMJ_tot_day, pet_cm, 'RowTimes', date2);
371OrderedCols2 = timetable2table(OrderedCols);
372writetable(OrderedCols2, 'Ecolab_ordered_cols_for_compiled.xlsx');
373
374%plot a time series of parameters...
375% Matlab's "timeseries" functions for some reason do not
376%recognize "datetime" vectors such as the "date2" vector created for adding
377%the date to the output daily average tables so you have to go back and use the
378%"daystring" vector
379
380% plot time series of battery voltage data
381ts1 = timeseries(batt_day, daystring);
382batt_min = min(ts1);
383
384%set(ts1, 'Name', 'Battery voltage')
385ts1.Name = 'Ecolab Daily Battery Voltage';
386ts1.TimeInfo.Units = 'days';
387ts1.TimeInfo.StartDate = '24-Jul-2015'; % Set start date.
388ts1.TimeInfo.Format = 'mmm dd, yy'; % Set format for display on x-axis.
389ts1.Time = ts1.Time - ts1.Time(1); % Express time relative to the start date.
390
391% Create figure
392figure1 = figure('Name','Ecolab Daily Battery Voltage');
393Plot1 = plot(ts1);
394title('Ecolab Daily Battery Voltage');
395ylabel('Voltage');
396
397% Create textbox expressing minimum battery voltage
398MinBatt = sprintf('%6.2f', batt_min);
399annotation(figure1,'textbox',...
400 [0.215564369310793 0.374554102259215 0.130989596879064 0.114149821640903],...
401 'String',{'min voltage =', MinBatt},...
402 'FitBoxToText','on');
403grid on
404
405%Plot precipitation
406t = datenum(date2);
407r = rain_day;
408
409figure(2);
410bar(date2,r);
411% Set bar graph properties
412ylabel('Precipitation (cm)')
413% Print Month and Year as Tick Label
414datetick('x','mmmyy');
415% Print graph title
416title('Ecolab Hyetograph');
417xticks(date2(1:60:end));
418datetick('x','dd mmm yyyy','keepticks');
419xtickangle(45); %45 deg rotation for readability
420grid on
421grid minor
422xtickangle(45);
423set(gcf,'position',[10 10 1600 800]);
424
425
426% plot time series of TDR soil-moisture data
427
428Moist3 = [VWC6in_day, VWC1ft_day, VWC18in_day];
429figure
430plot(date2,Moist3);
431xlabel('Year');
432ylabel('Volumetric Water Content');
433title(' Daily TDR Soil Moisture');
434%plots legend
435hold on
436legend('6in','1ft','18in','Location','northwest','Orientation','horizontal');
437xticks(date2(11:91:end)); %Sets up the quarterly dates on the x-axis
438datetick('x','mmm yy','keepticks');%Format for the dates on x-axis
439xtickangle(45); %45 deg rotation for readability
440xlim 'auto';
441grid on
442
443%Soil temperature plot
444Temp3 = [tsoil6in_day, tsoil1ft_day, tsoil18in_day];
445%Soil temperature plot
446figure
447plot(date2,Temp3);
448xlabel('Year');
449ylabel('Temperature (Celsius)');
450title('Ecolab Daily Soil Temperature');
451%plots legend
452hold on
453legend('6in','1ft','18in','Location','northwest','Orientation','horizontal');
454xticks(date2(11:91:end)); %Sets up the quarterly dates on the x-axis
455datetick('x','mmm yy','keepticks');%Format for the dates on x-axis
456xtickangle(45); %45 deg rotation for readability
457xlim 'auto';
458grid on
459
460%Soil matric potential plot
461Potential = [WP6inAVG_daycm, WP1ftAVG_daycm, WP18inAVG_daycm];
462
463figure
464plot(date2,Potential);
465xlabel('Year');
466ylabel('Matric Potential (cm)');
467title('Ecolab Daily Soil Matric Potential');
468%plots legend
469hold on
470legend('6in','1ft','18in','Location','northwest','Orientation','horizontal');
471xticks(date2(11:182:end)); %Sets up the semianual dates on the x-axis
472datetick('x','mmm yy','keepticks');%Format for the dates on x-axis
473xtickangle(45); %45 deg rotation for readability
474xlim 'auto';
475grid on
476
477%Plot pyronometer and net radiometer data (if installed at site)
478Rad = SlrMJ_tot_day;
479
480figure
481plot(date2,Rad);
482xlabel('Year');
483ylabel('Daily Megajoules');
484title('Ecolab Daily Radiation');
485%plots legend
486hold on
487legend('Pyronometer Reading');
488xticks(date2(11:182:end)); %Sets up the semianual dates on the x-axis
489datetick('x','mmm yy','keepticks');%Format for the dates on x-axis
490xtickangle(45); %45 deg rotation for readability
491xlim 'auto';
492grid on
493
494%Plot PET
495PETcomp = pet_cm;
496figure
497plot(date2,PETcomp);
498xlabel('Year');
499ylabel('PET cm');
500title('Ecolab Daily PET');
501%plots legend
502hold on
503legend('PET from Pyronometer');
504xticks(date2(11:182:end)); %Sets up the semianual dates on the x-axis
505datetick('x','mmm yy','keepticks');%Format for the dates on x-axis
506xtickangle(45); %45 deg rotation for readability
507xlim 'auto';
508grid on
509
510% plot time series of wind-speed data
511ts8 = timeseries(WS_avg_day, daystring);
512
513ts8.Name = 'Ecolab Daily Wind Speed';
514ts8.TimeInfo.Units = 'days';
515ts8.TimeInfo.StartDate = '24-Jul-2015'; % Set start date.
516ts8.TimeInfo.Format = 'mmm dd, yy'; % Set format for display on x-axis.
517ts8.Time = ts8.Time - ts8.Time(1); % Express time relative to the start date.
518grid on
519
520% Create figure
521figure8 = figure('Name','Ecolab Daily Wind Speed');
522Plot8 = plot(ts8);
523title('Ecolab Daily Wind Speed');
524ylabel('Velocity (m/s)');
525
526% plot time series of groundwater-level data
527ts9 = timeseries(GWlevelcm_day, daystring);
528
529ts9.Name = 'Ecolab Daily GW Level';
530ts9.TimeInfo.Units = 'days';
531ts9.TimeInfo.StartDate = '09-Jun-2015'; % Set start date.
532ts9.TimeInfo.Format = 'mmm dd, yy'; % Set format for display on x-axis.
533ts9.Time = ts9.Time - ts9.Time(1); % Express time relative to the start date.
534grid on
535
536% Create figure
537figure9 = figure('Name','Ecolab Daily GW Level');
538Plot9 = plot(ts9);
539title('Ecolab Daily GW Level');
540ylabel('Level');
541grid on