MATLAB Answers


How do I create a 3 dimensional response surface plot from X Y Z points ?

Asked by ferdi bayram on 17 Nov 2019 at 22:56
Latest activity Commented on by ferdi bayram on 18 Nov 2019 at 19:28
Hi all,
I am struggling a bit here, and hope somebody could help. I have a set of X Y and Z points and Z is not found by any function of X and Y. In other words, I have independent X Y and Z values and these values are;
288 2.79 7.55
318 4.64 14.28
127 2.31 8.31
132 7.16 17.27
264 2.31 4.32
200 2.60 6.74
268 3.06 15.12
I need to create a response surface plot (contour plot) from these values. I would be so glad and thankful if somebody could help with with that. I am sorry if question is not very clear. If not, I can ask in detail. In sort, I have eight X Y Z independent data and want to create a response surface.
Best Regards,


To create a response surface plot, you have to provide Z as a matrix.
Specifically, if two vector arguments X & Y defined such that length(X) = n and length(Y) = m then, size(Z) should be [m,n]. In order to plot the vertices of the surface patches as the triples (X(j), Y(i), Z(i,j)).
You have provided X,Y & Z as vector and if want 3d plot for that you can use
but I believe that's not what you want.
Question: What kind of plot are you expecting? if you can provide hand drawing or pictures that would be very helpful, right now it's unclear the kind of plot you are expecting with this data.
Hi Shubham,
First of all, thank you for trying to help me. Let me upload a couple of figures to clarify what I want. Since I do not know matlab deeply, I am not sure whether it is something I would be done
Here is what exactl what I want and I have done t in minitab program. The problem in here is that there is no scale bar and it is not colorful (red blue yellow to show critical points). That is why I am trying to solve this problem via matlab

Sign in to comment.

1 Answer

Answer by Akira Agata
on 18 Nov 2019 at 3:54
 Accepted Answer

How about using an interpolation? The following is a simple example:
% Apply cubic interpolation
[xGrid,yGrid] = meshgrid(linspace(min(X),max(X)),linspace(min(Y),max(Y)));
zGrid = griddata(X(:),Y(:),Z(:),xGrid(:),yGrid(:),'cubic');
zGrid = reshape(zGrid,size(xGrid));
% Visualize the result
hold on
grid on


Hi Akira, It looks really nice and fancy but since I am not good at matlab that much, could you please write the whole code that I can use ? My data is in the question. I would be so glad If you could write that.
Best regards
Please try the following:
D = [288 2.79 7.55;
318 4.64 14.28;
127 2.31 8.31;
132 7.16 17.27;
264 2.31 4.32;
200 2.60 6.74;
268 3.06 15.12];
X = D(:,1);
Y = D(:,2);
Z = D(:,3);
% Create 100x100 grid mesh (x,y) points
[xGrid,yGrid] = meshgrid(linspace(min(X),max(X)),linspace(min(Y),max(Y)));
% Interpolation
zGrid = griddata(X(:),Y(:),Z(:),xGrid(:),yGrid(:),'cubic');
zGrid = reshape(zGrid,size(xGrid));
% Fig.1 Contour plot with original data points
hold on
grid on
% Fig.2 Surf plot
Thank you very much Akira, it worked :)

Sign in to comment.