Contour Plotting in Surface Fitting Tool
6 次查看(过去 30 天)
显示 更早的评论
Hi All,
I used the surface fitting tool to generate a contour plot on some scattered data (vector x, vector y, and vector z). I would like to know if there are any ways to plot only the specified contour levels and also label those contour levels just like the contour function.
Please let me know if there are any alternatives to do contour plotting using scattered data. I have tried the TriScatteredInterp method, but the contour plot did not make any sense.
Any help will be greatly appreciated!
Thanks,
Lynniz
0 个评论
采纳的回答
Andreas Goser
2011-1-25
If I understand your question correctly, this can be achieved by exporting the data and creating a new contour plot that can be modified. Supporting information:
http://www.mathworks.com/support/solutions/en/data/1-AMH9HS/index.html
0 个评论
更多回答(2 个)
Richard Willey
2011-1-27
Here's some code that should help get you started. Most of this code is framing the problem. The section dealing with the customer contours is all the way at the bottom.
%% Generate a reference model using the peaks function
% Use a halton set to generate some random x, y data P = haltonset( 2 ); P = scramble( P, 'RR2' ); X = net( P, 30);
x = ((X(:,1)) * 6) - 3; y = (X(:,2) * 6) - 3;
% Use the peaks function to generate a z vector
z = peaks(x,y); z = z + .5 * randn(30,1);
% Use the fit command to create a fit object
ft = fittype( 'a*(1-x).^2.*exp(-(x.^2) - (y+1).^2) + b*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) + c*exp(-(x+1).^2 - y.^2)', 'indep', {'x', 'y'}, 'depend', 'z' ); opts = fitoptions( ft ); opts.Display = 'Off'; opts.Lower = [-Inf -Inf -Inf]; opts.StartPoint = [0.698493238453756 0.502175213611344 0.687201121067495]; opts.Upper = [Inf Inf Inf]; opts.Weights = zeros(1,0); [fittedmodel, gof] = fit( [x, y], z, ft, opts );
%% Problem Definition
% A 2D lookup table is an approximation of a response with points defined % by a row vector and column vector of containing M and N elements, % respectively. For example, we can approximate our model using a uniform % 13 x 13 grid
a = -3; b = 3; x = linspace(a,b,13); y = linspace(a,b,13); [X,Y] = meshgrid(x,y);
plot(fittedmodel, 'style','contour') hold on scatter(X(:),Y(:),'k','filled');
%% Generate a Fit Object to describe our 13 x 13 uniform table
Z = fittedmodel(X,Y); fitObj = fit([X(:), Y(:)], Z(:), 'linearinterp')
hold off plot(fitObj)
%% Visually compare the two surfaces
% Generate a reference grid to evaluate the two surfaces xr = linspace(a,b,100); yr = linspace(a,b,100); [Xr, Yr] = meshgrid(xr,yr);
% Calculate the difference between the two surfaces resid = fittedmodel(Xr(:), Yr(:)) - fitObj(Xr(:), Yr(:));
% Create a Fit Object describing the residuals Diff_Contour = fit([Xr(:), Yr(:)], resid, 'linearinterp');
% Generate a contour plot of the residuals figure('Numbertitle', 'off', 'name', 'Contour Map of Residuals: Uniform Grid')
xlim = [-3, 3]; ylim = [-3, 3]; obj = Diff_Contour;
[xi, yi] = meshgrid( ... linspace( xlim(1), xlim(2), 49 ), ... linspace( ylim(1), ylim(2), 51 ) ); zi = feval( obj, xi, yi );
[~, h] = contourf( xi, yi, zi, 21 );
grid on colorbar caxis ([-1.3 1.3])
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Fit Postprocessing 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!