Macarse
Macarse

Reputation: 93173

Drawing a surface with x,y,z points

I have a list of x, y, z in this form:

   -0.2894    1.2835    0.5405
   -0.8171   -0.3034    0.1824
    2.7864    0.5506    0.0037

I could plot using plot3(x,y,z, '*') and it works fine.

Now I would like to draw a surface, but when I do:

>> surf(x,y,z)
??? Error using ==> surf at 78
Z must be a matrix, not a scalar or vector.

How should I draw it?

Upvotes: 4

Views: 12487

Answers (1)

Jonas
Jonas

Reputation: 74940

I suggest you do a Delaunay triangulation of the x,y values, and then use z as height for a surface plot:

x = randn(100,1);
y = randn(100,1);
z = (exp(-x.^2-y.^2));
tri = delaunay(x,y);
trisurf(tri,x,y,z)

enter image description here

EDIT

Since you seem to have problems with your Matlab version, here's an alternative: use griddata to interpolate your data onto a regular grid, so that you can use surf for plotting.

x = randn(100,1);
y = randn(100,1);
z = (exp(-x.^2-y.^2));
[xx,yy]=meshgrid(-2:0.1:2,-2:0.1:2);
zz = griddata(x,y,z,xx,yy);
dfig,surf(xx,yy,zz)

enter image description here

Upvotes: 7

Related Questions