Two curves in one plot with wrong scaling

I want to show the measurement results of two measurements with a fitting curve in a plot. Now I want both values to start at x-value 1 and end at 13. I tried to do this with xticks and xticklabels, which has worked wonderfully so far. By adding the spline (from the curvefitting toolbox) I can no longer do it with the second value (y2).
Does anyone have an idea where the failure lies?
Here is the sample code:
y1= [ 1 2 3 4 5 6 7 8 9 10 11 12 13]
y2= [ 10 20 30 40 50 60 70 80 90 100 110 120 130]
ft = fittype( 'smoothingspline' );
opts = fitoptions( 'Method', 'SmoothingSpline' );
f = figure(1);
set(f, 'Units', 'normalized', 'Position', [0.1, 0.1, 0.7, 0.7]);
opts.SmoothingParam = 1;
[xData, yData] = prepareCurveData( [], y1 )
[fitresult, gof] = fit( xData, yData, ft, opts );
plot(fitresult,'b')
hold on
[xData, yData] = prepareCurveData( [], y2 )
[fitresult, gof] = fit( xData, yData, ft, opts );
plot(fitresult,'r')
grid on
legend('y1','y2')
xticks([0 1 2 3 4 5 6 7 8 9 10 11 12 13 14])
xticklabels({'',1,2,3,4,5,6,7,8,9,10,11,12,13,0})

 Réponse acceptée

darova
darova le 23 Fév 2020
Use function that fit() returns
[fitresult, gof] = fit( xData, yData, ft, opts );
% plot(fitresult,'r')
plot(xData,fitresult(xData),'r')

5 commentaires

Mepe
Mepe le 24 Fév 2020
Many thanks for your response!
The scaling now fits perfectly!
Unfortunately the curve smoothing no longer works (cou can't see it with my trivial example). Do you have an idea why?
You can manually enable this feature. Try:
plot(x,y,'linesmoothing','on')
Sorry, I do not understand that. Shouldn't the smoothed lines already be called up via "fitresult"?
The Code
plot(xData,fitresult(xData),'b','linesmoothing','on')
also only delivers the original data...
darova
darova le 24 Fév 2020
Can you please specify what do you mean by "smooth"?
What about manual spline?
[fitresult, gof] = fit( xData, yData, ft, opts );
% plot(fitresult,'r')
x1 = linspace(xData(1),xData(end),100);
y1 = spline(xData,fitresult(xData),x1);
plot(xData,fitresult(xData),'.r')
hold on
plot(x1,y1,'b')
hold off

Connectez-vous pour commenter.

Plus de réponses (1)

Mepe
Mepe le 25 Fév 2020
I generated a spline code using the curve fitting toolbox:
ft = fittype( 'smoothingspline' );
opts = fitoptions( 'Method', 'SmoothingSpline' );
opts.SmoothingParam = 1;
[xData, yData] = prepareCurveData( [], y1 )
[fitresult, gof] = fit( xData, yData, ft, opts );
plot(fitresult,'b')

Catégories

En savoir plus sur Get Started with Curve Fitting Toolbox dans Centre d'aide et File Exchange

Question posée :

le 23 Fév 2020

Commenté :

le 25 Fév 2020

Community Treasure Hunt

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

Start Hunting!

Translated by