Line of Best Fit for a time series plot
12 views (last 30 days)
Show older comments
I would like to know how I can use the polyfit function to fit a line to my time series plot.
ts_MinJan = timeseries(Jan_Min,1:41);
ts_MinJan.Name = 'Janurary Min';
ts_MinJan.TimeInfo.Units = 'Year';
subplot(3,4,1), plot(ts_MinJan)
ts_MinFeb = timeseries(Feb_Min,1:41);
ts_MinFeb.Name = 'February Min';
ts_MinFeb.TimeInfo.Units = 'Year';
subplot(3,4,2), plot(ts_MinFeb)
ts_MinMar = timeseries(Mar_Min,1:41);
ts_MinMar.Name = 'March Min';
ts_MinMar.TimeInfo.Units = 'Year';
subplot(3,4,3), plot(ts_MinMar)
ts_MinApr = timeseries(Apr_Min,1:41);
ts_MinApr.Name = 'April Min';
ts_MinApr.TimeInfo.Units = 'Year';
subplot(3,4,4), plot(ts_MinApr)
ts_MinMay = timeseries(May_Min,1:41);
ts_MinMay.Name = 'May Min';
ts_MinMay.TimeInfo.Units = 'Year';
subplot(3,4,5), plot(ts_MinMay)
ts_MinJun = timeseries(Jun_Min,1:41);
ts_MinJun.Name = 'June Min';
ts_MinJun.TimeInfo.Units = 'Year';
subplot(3,4,6), plot(ts_MinJun)
ts_MinJul = timeseries(Jul_Min,1:41);
ts_MinJul.Name = 'July Min';
ts_MinJul.TimeInfo.Units = 'Year';
subplot(3,4,7), plot(ts_MinJul)
ts_MinAug = timeseries(Aug_Min,1:41);
ts_MinAug.Name = 'August Min';
ts_MinAug.TimeInfo.Units = 'Year';
subplot(3,4,8), plot(ts_MinAug)
ts_MinSep = timeseries(Sep_Min,1:41);
ts_MinSep.Name = 'September Min';
ts_MinSep.TimeInfo.Units = 'Year';
subplot(3,4,9), plot(ts_MinSep)
ts_MinOct = timeseries(Oct_Min,1:41);
ts_MinOct.Name = 'October Min';
ts_MinOct.TimeInfo.Units = 'Year';
subplot(3,4,10), plot(ts_MinOct)
ts_MinNov = timeseries(Nov_Min,1:41);
ts_MinNov.Name = 'November Min';
ts_MinNov.TimeInfo.Units = 'Year';
subplot(3,4,11), plot(ts_MinNov)
ts_MinDec = timeseries(Dec_Min,1:41);
ts_MinDec.Name = 'December Min';
ts_MinDec.TimeInfo.Units = 'Year';
subplot(3,4,12), plot(ts_MinDec)
0 Comments
Answers (2)
Mathieu NOE
on 30 Nov 2023
hello
I am not working that much with timeseries , but IMHO, you could do the polyfit first on the raw data , otherwise you can still access the data from a timeseries to do the fit then you have to create a new timeserie for the fitted curve to overlay on the plot
demo :
n = 10;
t = (0:n-1)';
x = 1+t/n + 0.1*randn(n,1);
ts1 = timeseries(x,t);
ts1.Name = 'Daily Count';
ts1.TimeInfo.Units = 'days';
ts1.TimeInfo.StartDate = '01-Jan-2011'; % Set start date.
ts1.TimeInfo.Format = 'mmm dd, yy'; % Set format for display on x-axis.
ts1.Time = ts1.Time - ts1.Time(1); % Express time relative to the start date.
plot(ts1)
% polyfit
% [p,S,mu] = polyfit(t,x,1); % polyfit on raw data
[p,S,mu] = polyfit(t,ts1.Data,1); % polyfit on ts1 data
[xfit,delta] = polyval(p,t,S,mu);
ts2 = timeseries(xfit,t);
ts2.TimeInfo.Units = 'days';
ts2.TimeInfo.StartDate = '01-Jan-2011'; % Set start date.
ts2.TimeInfo.Format = 'mmm dd, yy'; % Set format for display on x-axis.
ts2.Time = ts2.Time - ts2.Time(1); % Express time relative to the start date.
% Plot fit line:
hold on
plot(ts2)
0 Comments
Peter Perkins
on 30 Nov 2023
There are a bunch of things you might mean by this, but here's one thing you might do.
% set up random data
Time = datetime(1983:2023,1,1,Format="uuuu");
tt = array2timetable(rand(41,12),RowTimes=Time,VariableNames=["Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"]);
% fit a quadratic to each month's data, plot along with the raw data
t = 1:length(Time);
tt2 = varfun(@(x) polyval(polyfit(t,x,2),t)',tt);
tt2.Properties.VariableNames = tt.Properties.VariableNames;
stackedplot(tt,tt2)
0 Comments
See Also
Categories
Find more on Weather and Atmospheric Science in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!