smooth a surface plot

16 次查看(过去 30 天)
Lauren E
Lauren E 2015-4-2
I have an array of data which I'm plotting using the surface function. I'd like to smooth the data but interp2 doesn't work since I don't have a mesh (I'm plotting data, not a function). Is there a way I can smooth this?
My code isn't much to look at:
surface = surf(P1,P2,L);
where P1, P2 and L are imported from a data file.

回答(1 个)

Andrew Newell
Andrew Newell 2015-4-2
编辑:Andrew Newell 2015-4-2
You can make a mesh:
[P1,P2] = meshgrid(P1,P2);
Then use interp2.
EDIT: Corrected typo.
  5 个评论
Andrew Newell
Andrew Newell 2015-4-2
Sorry, I was careless with the notation. Here is a working example of what I mean, starting with an example from the MATLAB documentation:
x = -8:1:8; y = x;
[X,Y] = meshgrid(x,y);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
If we ignore how the data were generated, we now have vectors x, y and a matrix Z, and we could plot
surf(x,y,Z)
Now lets' interpolate to a finer grid. I like the spline method because it makes a smoother interpolation:
Xq = -8:.5:8; Yq = Xq;
[Xq,Yq] = meshgrid(Xq,Yq);
Zq = interp2(X,Y,Z,Xq,Yq,'spline');
figure
surf(Xq,Yq,Zq)
imran saeed
imran saeed 2021-2-15
Based on above discussion I made this funciton, it will make coding easier, you can call this function many times to make your function smoother and smoother,
function [X,Y,Z]=smooth_spline(x,y,z)
n=length(x); sp=min(x); ep=max(x);
X=linspace(sp,ep,2*n);
sp=min(y); ep=max(y);
Y=linspace(sp,ep,2*n);
[Kxx,Kyy]=meshgrid(X,Y);
Z = interp2(x,y,z,Kxx,Kyy,'spline');
end

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Surface and Mesh Plots 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by