MATLAB: I have a surface and I want to plot peaks on the 3D surface in matlab

3d surface with peaksMATLAB

I want to plot a 3D surface that is 0 to 4 on the x-axis, 0 to 1 on y-axis and 0 on the z axis (or some z if necessary like 0 to 1). Then I want to plot peaks on that surface, given the x, y, and z coordinates of the peak on the surface.
The data looks similar to:
x y z
0.75 0.23 -2.86
0.75 0.47 3.87
0.75 0.64 2.78
2.45 0.23 4.56
2.45 0.47 0.89
2.45 0.64 2.74
3.23 0.23 2.10
3.23 0.47 -3.65
3.23 0.64 -5.89
Each row of the data is the x, y, and z coordinate of a specific peak on the 4 by 1 surface.
The code that I am using now (written by Stephen Cobeldick):
close all
a=[0.75 0.23 -2.86
0.75 0.47 3.87
0.75 0.64 2.78
2.45 0.23 4.56
2.45 0.47 0.89
2.45 0.64 2.74
3.23 0.23 2.10
3.23 0.47 -3.65
3.23 0.64 -5.89]
x = reshape(a(:,1),3,3);
y = reshape(a(:,2),3,3);
z = reshape(a(:,3),3,3);
surf(x,y,z, 'FaceColor','interp')
This code sort of works in the sense that it shows the distortion of the data a crossed a surface, but it would be ideal to create a 4 by 1 surface and then create specific peaks on that surface.
The end result that I am looking for is something that resembles this:
I would really appreciate any code that would help me to accomplish this goal.
Thank you

Best Answer

if true
% Code from another forum not sure the author.
a=[0.75 0.23 -2.86
0.75 0.47 3.87
0.75 0.64 2.78
2.45 0.23 4.56
2.45 0.47 0.89
2.45 0.64 2.74
3.23 0.23 2.10
3.23 0.47 -3.65
3.23 0.64 -5.89
0 0 0
4 0 0
4 1 0
0 1 0]
figure1 = figure;
x= a(:,1);
y=a(:,2);
z=a(:,3);
dx=0.05;
dy=0.05;
x_edge=[floor(min(x)):dx:ceil(max(x))];
y_edge=[floor(min(y)):dy:ceil(max(y))];
[X,Y]=meshgrid(x_edge,y_edge);
Z=griddata(x,y,z,X,Y);
surf(X,Y,Z)
I just added the corners of the flat surface as four additional points and it created a base line for the data to correlate to creating peaks at the points of the data.