How do I plot interpolated grid data and original datapoint set in the same plot?
5 次查看(过去 30 天)
显示 更早的评论
Hi,
After creating a grid data series (Data Terrain Model) from interpolating contour lines, I would like to plot everything on the same layer, but I am not sure if it is possible in matlab. Here is the gist of what I've done:
[xi,yi] = meshgrid(Xmin:res:Xmax, Ymin:res:Ymax);
f = scatteredInterpolant(contour_grid.X,contour_grid.Y,contour_grid.Z);
zi= f(xi,yi)
Xi=[xi(:); contour_grid.X];
Yi=[yi(:); contour_grid.Y];
Zi=[zi(:); contour_grid.Z];
Is there a way to plot Xi, Yi, and Zi? I'd have to turn these arrays back into grids to be able to use mesh(X,Y,Z) but I am struggling to write how to do that.
Has anyone ever had to do that?
Thanks,
0 个评论
采纳的回答
Bjorn Gustavsson
2019-9-17
You can always simply plot all your points:
plot3(Xi,Yi,Zi,'r.')
Or with scatter:
scatter(Xi,Yi,32,Zi,'filled')
But to me this seems to be more interesting:
pcolor(xi,yi,zi),
% shading flat % or interp adjust shading to fit taste
hold on
plot(xi,yi,'k.','markersize',6)
scatter(contour_grid.X,contour_grid.Y,23,contour_grid.Z,'filled')
Or you could compare contour-plots:
Levels = linspace(min(Zi(:)),max(Zi),10);
contour(Xi,Yi,Zi,Levels,'k')
hold on
tri=delaunay(contour_grid.X,contour_grid.Y);
[c,h]=tricontour(tri,contour_grid.X,contour_grid.Y,contour_grid.Z,Levels);
plot(contour_grid.X,contour_grid.Y,'k.')
You can find the tricontour function on the file exchange: TRICONTOUR
HTH
3 个评论
Bjorn Gustavsson
2019-9-18
This whish of yours confuse me. First you say that "plotting all the points" are too taxing, then you say that you want to plot Xi, Yi and Zi - that are explicitly all points you have.
The terse answer is: matlab's mesh function cannot do what you want. It requires, just as its plot-function siblings pcolor, surf et al., points in 2-D arrays (you have such for xi, yi and zi, but your contour_grid.X, contour_grid.Y, and contour_grid.Z are in 1-D arrays. It is not straightfor (impossible) ward to merge these into 1 set of regular 2-D arrays).
You might get what you request with the trimesh function. That would give you a mesh-plot of all points if you call it with something like:
tri=delaunay(Xi,Yi);
trimesh(tri,Xi,Yi,Zi);
Then adjust and add contour-plots and other stuff as you whish.
HTH
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Surface and Mesh Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!