How to have a 2D surface plot from the two columns of data?

10 次查看(过去 30 天)
Hi. I have a data where the first two columns are the x and y coordinates, while the third column is the color. How can I plot such that it give me a 2D surface plot with colorbar as well. The data is attached here. Thank you.

采纳的回答

Cameron
Cameron 2023-2-24
编辑:Cameron 2023-2-24
%x = your x data
%y = your y data
%c = your color data
scatter3(x,y,c,[],c,'filled')
colorbar
colormap turbo %you can omit this line if you want or change turbo to something else
a = gca;
a.View = [0 90];

更多回答(1 个)

Image Analyst
Image Analyst 2023-2-24
编辑:Image Analyst 2023-2-24
If you have a list of 2-D (x,y) locations and you want to get a surface, you will have to interpolate a surface value for the missing points. The function to do that is scatteredInterpolant.
help scatteredInterpolant
scatteredInterpolant Scattered data interpolation scatteredInterpolant performs interpolation on scattered data that resides in 2-D or 3-D space. A scattered data set is defined by sample points X and corresponding values v. A scatteredInterpolant object F represents a surface of the form v = F(X). Interpolated values vq at query points Xq are obtained by evaluating the interpolant, vq = F(Xq). F = scatteredInterpolant creates an empty scattered data interpolant. F = scatteredInterpolant(X,v) creates an interpolant that fits a surface of the form v = F(X) to the sample data set (X,v). The sample points X must have size NPTS-by-2 in 2-D or NPTS-by-3 in 3-D, where NPTS is the number of points. Each row of X contains the coordinates of one sample point. The values v must be a column vector of length NPTS. F = scatteredInterpolant(x,y,v) and F = scatteredInterpolant(x,y,z,v) also allow the sample point locations to be specified in alternative column vector format when working in 2-D and 3-D. F = scatteredInterpolant(...,METHOD) specifies the method used to interpolate the data. METHOD must be one of the following: 'linear' - (default) Linear interpolation 'nearest' - Nearest neighbor interpolation 'natural' - Natural neighbor interpolation The 'natural' method is C1 continuous except at the sample points. The 'linear' method is C0 continuous. The 'nearest' method is discontinuous. F = scatteredInterpolant(...,METHOD,EXTRAPOLATIONMETHOD) also specifies the extrapolation method used for query points outside the convex hull. EXTRAPOLATIONMETHOD must be one of the following: 'linear' - (default if METHOD is 'linear' or 'natural') Linear extrapolation based on boundary gradients 'nearest' - (default if METHOD is 'nearest') Evaluates to the value of the nearest neighbor on the convex hull boundary 'none' - Queries outside the convex hull return NaN Example: % Construct a scatteredInterpolant F from locations x,y and values v t = linspace(3/4*pi,2*pi,50)'; x = [3*cos(t); 2*cos(t); 0.7*cos(t)]; y = [3*sin(t); 2*sin(t); 0.7*sin(t)]; v = repelem([-0.5; 1.5; 2],length(t)); F = scatteredInterpolant(x,y,v) % Evaluate F at query locations xq,yq to obtain interpolated values vq tq = linspace(3/4*pi+0.2,2*pi-0.2,40)'; xq = [2.8*cos(tq); 1.7*cos(tq); cos(tq)]; yq = [2.8*sin(tq); 1.7*sin(tq); sin(tq)]; vq = F(xq,yq); % Plot the sample data (x,y,v) and interpolated query data (xq,yq,vq) plot3(x,y,v,'.',xq,yq,vq,'.'), grid on title('Linear Interpolation') xlabel('x'), ylabel('y'), zlabel('Values') legend('sample data','interpolated query data','Location','best') % Change the interpolation method from 'linear' to 'nearest' F.Method = 'nearest' % Perform nearest neighbor interpolation and plot the result vq = F(xq,yq); figure plot3(x,y,v,'.',xq,yq,vq,'.'), grid on title('Nearest Interpolation') xlabel('x'), ylabel('y'), zlabel('Values') legend('sample data','interpolated query data','Location','best') scatteredInterpolant properties: Points - Locations of the scattered sample points Values - Values associated with each sample point Method - Method used to interpolate at query points ExtrapolationMethod - Extrapolation method used outside the convex hull scatteredInterpolant methods: vq = F(Xq) evaluates the scatteredInterpolant F at scattered query points Xq and returns a column vector of interpolated values vq. Each row of Xq contains the coordinates of one query point. vq = F(xq,yq) and vq = F(xq,yq,zq) also allow the scattered query points to be specified as column vectors of coordinates. Vq = F(Xq,Yq) and Vq = F(Xq,Yq,Zq) evaluates F at gridded query points specified in full grid format as 2-D and 3-D arrays created from grid vectors using [Xq,Yq,Zq] = NDGRID(xqg,yqg,zqg). Vq = F({xqg,yqg}) and Vq = F({xqg,yqg,zqg}) also allow a grid of query points to be specified in compact form as grid vectors. Use this syntax to conserve memory when the query points form a large grid. Vq has the same size as the grid: LENGTH(xqg)-by-LENGTH(yqg) or LENGTH(xqg)-by-LENGTH(yqg)-by-LENGTH(zqg). See also griddedInterpolant, griddata, delaunayTriangulation Documentation for scatteredInterpolant doc scatteredInterpolant
See my attached demo where I let you click a bunch of arbitrary points of your choice and it then interpolates the surface.
In the above demo I clicked on 9 points and for the "z" values at those locations I used the gray level of the image. You can see the points I clicked on and the values of the interpolated image in between those points. While I displayed it as an image you could just as well use surf() to display/render it as a surface in a 3-D axes.

类别

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