How to plot a fit object without extrapolation?

10 views (last 30 days)
Hi, I am looking for a way to plot a curve fit object but without the extrapolation at the beginning and the end of the curve. My code for the current graph is as follows:
% Fit
[Fit.(string).fitresult, Fit.(string).gof] = fit( xData1, yData1, ft, 'Normalize', 'on' );
hc(k) = plot(xData1, yData1, '.', 'Marker', markerlist(k),'MarkerEdgeColor',colorlist(k,:),'MarkerFaceColor',colorlist(k,:));
hold on
% Plot fit
ha = plot(Fit.(string).fitresult);
Which generates this figure:
Since the end line, especially for the red curve, is not right, I need to remove that part. Does anyone have a solution? Thanks in advance! Best regards, Katharina

Accepted Answer

Sean de Wolski
Sean de Wolski on 30 Sep 2014
You can pass 'XLim' into fitresult's plot to plot only over a specific range in x.
  2 Comments
Katharina
Katharina on 1 Oct 2014
Sorry, I don't know how to unaccept an answer... Anyhow, it doesn't work for:
% Fit
[Fit.(string).fitresult, Fit.(string).gof] = fit( xData, yData, ft, 'Normalize', 'on' );
ha = plot(Fit.(string).fitresult, 'XLim', [min(xData) max(xData)]);
yields an error message:
Error using cfit/plot>parseinput (line 328)
Must specify both XDATA and YDATA.
Doesn't the XLim option only work for sfit objects and not for cfit objects? That is how I understand the documentation.
Sean de Wolski
Sean de Wolski on 1 Oct 2014
Sorry, you're right and that certainly looks like a good enhancement request for cfits.
It looks like you'll have to evaluate it at the query points explicitly and then plot the x/y vectors.
For example:
x = 1:8;
y = fitresult(x); % evaluate at x
plot(x,y) % plot the vectors

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!