smooth a surface plot
14 次查看(过去 30 天)
显示 更早的评论
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.
0 个评论
回答(1 个)
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
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
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 Center 和 File Exchange 中查找有关 Smoothing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!